• 大神帮看我的关于大整数减法的答案哪里写错了
  • 其它

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

  • TIMI    2019-11-18 15:55:20
  • 阅读 1638    收藏 0    回答 1
  • 邀请
  • 收藏
  • 分享
发送
登录 后发表评论
  • 51testing软件测试圈微信