#include<string.h> int main() { int i,j=0; char ch[256]={}; char th[256]={}; char nh[256]={}; int a[256]={0}; int b[256]={0}; int c[256]={0}; int k=0; gets(ch); gets(th); int len1=strlen(ch); int len2=strlen(th); if(len1<len2){printf("-"); strcpy(nh,th); strcpy(th,ch); strcpy(ch,nh); } for(i=len1-1;i>=0;i--) { a[j++]=ch[i]-'0';} j=0; for(i=len2-1;i>=0;i--) { b[j++]=th[i]-'0';} j=0; for(i=0;i<=255;i++) { if (a[i]-b[i]<0) {if(a[i+1]!=0){a[i+1]--;a[i]=a[i]+10-b[i];} else j=i+1;while(ch[j]==0){ch[j]=9;j++;} ch[j]--;a[i]=a[i]+10-b[i];} else a[i]-=b[i]; } j=0; for(i=255;i>=0;i--) { c[j++]=a[i]; } for(i=0;i<=255;i++) { if(c[i]!=0) k=1; if(k==1) printf("%d",c[i]);} if(k==0) printf("0"); return 0; }
求两个大的正整数相减的差。
输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
输出
一行,即所求的差。
我的思路是将字符串中的数字逆向赋予数组,然后进行从个位开始进行减法,最后再逆向清零,即得到最终答案
if (a[i]-b[i]<0) {if(a[i+1]!=0){a[i+1]--;a[i]=a[i]+10-b[i];} else j=i+1;while(ch[j]==0){ch[j]=9;j++;} ch[j]--;a[i]=a[i]+10-b[i];} else a[i]-=b[i];
问题应该是出在这个混乱的步骤里,这一步我想的是,如果不能减就要一直向前一位借位,但是好像写的不对 (如果不用借位的话应该是可以得到正确的答案) 希望大神在原有基础上帮我改一下