#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];
问题应该是出在这个混乱的步骤里,这一步我想的是,如果不能减就要一直向前一位借位,但是好像写的不对
(如果不用借位的话应该是可以得到正确的答案)
希望大神在原有基础上帮我改一下