cccccccaiji 2020-12-13 16:29 采纳率: 100%
浏览 13
已结题

高精度加减法哪里错了啊

#include <stdio.h>
#include <stdlib.h>
#define M 1200

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

char a[10000][2000],result[10000][2000],mid[2000];
int main(int argc, char *argv[]) {
    int line,i,j=0,len1,len2,sum[2000],m,k,flag,pos,pp;
    scanf("%d",&line);
    for(i=0;i<line;i++){
        scanf("%s",a[i]);
    }
    for(i=0;i<line;i++){
        for(j=0;j<1200;j++){
            sum[j]=0;
        }
        j=0;
        len1=0;
        len2=0;
        while(a[i][j]!='+'&&a[i][j]!='-'){
            len1++;
            j++;
        }
        m=j;
        //printf("%d %d",len1,j);
        j++;
        while(a[i][j]!='\0'){
            len2++;
            j++;
        }
        //printf("%d %d %d",len1,len2,j);
        if(a[i][m]=='+'){
            if(len1>len2){
                for(k=0;k<len2;k++){
                    sum[k]=a[i][m-1]-48+a[i][j-1]-48;
                    if(sum[k]>=10){
                        a[i][m-2]++;
                        sum[k]=sum[k]-10;
                    }
                    m--;
                    j--;
                }
                for(k=len2;k<len1-1;k++){
                    sum[k]=a[i][m-1]-48;
                    if(sum[k]>=10){
                        a[i][m-2]++;
                        sum[k]=sum[k]-10;
                    }    
                    m--;                
                }
                if(a[i][m-1]>=58) {
                    printf("1");
                    sum[k]=0;
                }
                else{
                    sum[k]=a[i][m-1]-48;
                }
                /*/for(flag=0;flag<len1;flag++){
                    printf("%d\n",sum[flag]);
                }/*/
                flag=len1;
                for(j=0;j<len1;j++){
                    result[i][j]=sum[flag-1]+48;//错在len1--的话判断条件会不断改变 
                    flag--;
                }
                for(j=0;j<len1;j++){
                    printf("%c",result[i][j]);
                }
                printf("\n");
                /*/for(j=0;j<len1;j++){
                    printf("%c",sum[len1-1-j]+48);
                }
                printf("\n");/*/
            }
            else if(len1<len2){
                for(pp=0;pp<=len1+len2;pp++){
                    mid[pp]=a[i][pp];
                }
                for(pp=0;pp<len2;pp++){
                    a[i][pp]=mid[pp+len1+1];
                }
                for(pp=len2+1;pp<=len1+len2;pp++){
                    a[i][pp]=mid[pp-len2-1];
                }
                a[i][len2]='+';
                /*/for(pp=0;pp<=len1+len2;pp++){
                    printf("%c",a[i][pp]);
                }/*/
                j=0;
                len1=0;
                len2=0;
                while(a[i][j]!='+'&&a[i][j]!='-'){
                    len1++;
                    j++;
                }
                m=j;
                //printf("%d %d",len1,j);
                j++;
                while(a[i][j]!='\0'){
                    len2++;
                    j++;
                }
                //printf("%d %d %d",len1,len2,j); 
                for(k=0;k<len2;k++){
                    sum[k]=a[i][m-1]-48+a[i][j-1]-48;
                    if(sum[k]>=10){
                        a[i][m-2]++;
                        sum[k]=sum[k]-10;
                    }
                    m--;
                    j--;
                }
                for(k=len2;k<len1-1;k++){
                    sum[k]=a[i][m-1]-48;
                    if(sum[k]>=10){
                        a[i][m-2]++;
                        sum[k]=sum[k]-10;
                    }    
                    m--;                
                }
                if(a[i][m-1]>=58) {
                    printf("1");
                    sum[k]=0;
                }
                else{
                    sum[k]=a[i][m-1]-48;
                }
                /*/for(flag=0;flag<len1;flag++){
                    printf("%d\n",sum[flag]);
                }/*/
                flag=len1;
                for(j=0;j<len1;j++){
                    result[i][j]=sum[flag-1]+48;//错在len1--的话判断条件会不断改变 
                    flag--;
                }
                for(j=0;j<len1;j++){
                    printf("%c",result[i][j]);
                }
                printf("\n");                
            }
            else if(len1==len2){
                if(len1==1){
                    printf("%d\n",a[i][0]+a[i][len1+1]-96);
                }
                else {
                pos=m;
                for(k=0;k<len2-1;k++){
                    sum[k]=a[i][m-1]-48+a[i][j-1]-48;
                    if(sum[k]>=10){
                        a[i][m-2]++;
                        sum[k]=sum[k]-10;
                    }
                    m--;
                    j--;
                }
                if((a[i][0]-48+a[i][pos+1]-48)<10){
                    sum[len1-1]=a[i][0]-48+a[i][pos+1]-48;
                    flag=len1;
                    for(j=0;j<len1;j++){
                        result[i][j]=sum[flag-1]+48;
                        flag--;
                    }
                    for(j=0;j<len1;j++){
                        printf("%c",result[i][j]);
                    }
                    printf("\n");
                }
                else if((a[i][0]-48+a[i][pos+1]-48)>=10){
                    sum[len1-1]=a[i][0]-48+a[i][pos+1]-48-10;//为啥???????? 
                    sum[len1]=1;
                    flag=len1;
                    for(j=0;j<=len1;j++){
                        result[i][j]=sum[flag]+48;
                        flag--;
                    }
                    for(j=0;j<=len1;j++){
                        printf("%c",result[i][j]);
                    }
                    printf("\n");
                }
            }
            }
        }
        if(a[i][m]=='-'){
            if(len1>len2){
                for(k=0;k<len2;k++){
                    sum[k]=a[i][m-1]-a[i][j-1];
                    if(sum[k]<0){
                        a[i][m-2]--;
                        sum[k]=sum[k]+10;
                    }
                    m--;
                    j--;
                }
                if((a[i][m-1]-48)<0){
                    sum[len2]=9;
                    a[i][m-2]--;
                    for(k=len2+1;k<len1;k++){
                        sum[k]=a[i][m-2]-48;
                        m--;
                    }
                    if(sum[len1-1]==0){
                        flag=len1;
                        for(j=0;j<len1-1;j++){
                            result[i][j]=sum[flag-2]+48;
                            flag--;
                        }
                        for(j=0;j<len1-1;j++){
                            printf("%c",result[i][j]);
                        }
                        printf("\n");
                    }
                    else{
                        flag=len1;
                        for(j=0;j<len1;j++){
                            result[i][j]=sum[flag-1]+48;
                            flag--;
                        }
                        for(j=0;j<len1;j++){
                            printf("%c",result[i][j]);
                        }
                        printf("\n");    
                    }
                } 
                else if((a[i][m-1]-48)==0&&len1==len2+1){
                        flag=len1;
                        for(j=0;j<len1-1;j++){
                            result[i][j]=sum[flag-2]+48;
                            flag--;
                        }
                        for(j=0;j<len1-1;j++){
                            printf("%c",result[i][j]);
                        }
                        printf("\n");                    
                }
                else{
                    for(k=len2;k<len1;k++){
                        sum[k]=a[i][m-1]-48;
                        m--;
                    }
                    flag=len1;
                    for(j=0;j<len1;j++){
                        result[i][j]=sum[flag-1]+48;
                        flag--;
                    }
                    for(j=0;j<len1;j++){
                        printf("%c",result[i][j]);
                    }
                    printf("\n");
                }
            }
            else if(len1<len2){
                for(pp=0;pp<=len1+len2;pp++){
                    mid[pp]=a[i][pp];
                }
                for(pp=0;pp<len2;pp++){
                    a[i][pp]=mid[pp+len1+1];
                }
                for(pp=len2+1;pp<=len1+len2;pp++){
                    a[i][pp]=mid[pp-len2-1];
                }
                a[i][len2]='+';
                /*/for(pp=0;pp<=len1+len2;pp++){
                    printf("%c",a[i][pp]);
                }/*/
                len1=0;
                len2=0;
                j=0;//赋初值!!!!!! 
                while(a[i][j]!='+'){
                    len1++;
                    j++;
                }
                m=j;
                j++;
                while(a[i][j]!='\0'){
                    len2++;
                    j++;
                }
                //printf("%d %d %d %d",len1,len2,m,j);
                for(k=0;k<len2;k++){
                    sum[k]=a[i][m-1]-a[i][j-1];
                    if(sum[k]<0){
                        a[i][m-2]--;
                        sum[k]=sum[k]+10;
                    }
                    m--;
                    j--;
                }
                if((a[i][m-1]-48)<0){
                    sum[len2]=9;
                    a[i][m-2]--;
                    for(k=len2+1;k<len1;k++){
                        sum[k]=a[i][m-2]-48;
                        m--;
                    }
                    if(sum[len1-1]==0){
                        flag=len1;
                        for(j=0;j<len1-1;j++){
                            result[i][j]=sum[flag-2]+48;
                            flag--;
                        }
                        printf("-");
                        for(j=0;j<len1-1;j++){
                            printf("%c",result[i][j]);
                        }
                        printf("\n");
                    }
                    else{
                        flag=len1;
                        for(j=0;j<len1;j++){
                            result[i][j]=sum[flag-1]+48;
                            flag--;
                        }
                        printf("-");                        
                        for(j=0;j<len1;j++){
                            printf("%c",result[i][j]);
                        }
                        printf("\n");    
                    }
                } 
                else if((a[i][m-1]-48)==0&&len1==len2+1){
                        flag=len1;
                        for(j=0;j<len1-1;j++){
                            result[i][j]=sum[flag-2]+48;
                            flag--;
                        }
                        printf("-");                        
                        for(j=0;j<len1-1;j++){
                            printf("%c",result[i][j]);
                        }
                        printf("\n");                    
                }
                else{
                    for(k=len2;k<len1;k++){
                        sum[k]=a[i][m-1]-48;
                        m--;
                    }
                    flag=len1;
                    for(j=0;j<len1;j++){
                        result[i][j]=sum[flag-1]+48;
                        flag--;
                    }
                    printf("-");                    
                    for(j=0;j<len1;j++){
                        printf("%c",result[i][j]);
                    }
                    printf("\n");
                }                
            }
            else if(len1==len2){
                pos=m;
                flag=0;
                for(k=0;k<len1;k++){
                    if(a[i][k]>a[i][k+len1+1]){
                        flag=1;
                        break;
                }
                else if(a[i][k]<a[i][k+len1+1]){
                    flag=2;
                    break;
                }
            }
            //printf("%d",flag);
                switch(flag){
                    case 0:printf("0\n");break;
                    case 1:{
                        for(k=0;k<len2;k++){
                            sum[k]=a[i][m-1]-a[i][j-1];
                            if(sum[k]<0){
                                a[i][m-2]--;
                                sum[k]=sum[k]+10;
                            }
                            m--;
                            j--;
                        }
                        flag=len1;
                        while(sum[flag-1]==0){
                            flag--;
                            len1--;
                        }//上面也可以这样处理吧 
                        for(j=0;j<len1;j++){
                            result[i][j]=sum[flag-1]+48;
                            flag--;
                        }
                        for(j=0;j<len1;j++){
                            printf("%c",result[i][j]);
                        }
                        printf("\n");                
                        break;
                    }
                    case 2:{
                        for(pp=0;pp<=len1+len2;pp++){
                            mid[pp]=a[i][pp];
                        }
                        for(pp=0;pp<len2;pp++){
                            a[i][pp]=mid[pp+len1+1];
                        }
                        for(pp=len2+1;pp<=len1+len2;pp++){
                            a[i][pp]=mid[pp-len2-1];
                        }
                        a[i][len2]='-';
                        /*/for(pp=0;pp<=len1+len2;pp++){
                            printf("%c",a[i][pp]);
                        }/*/
                        len1=0;
                        len2=0;
                        j=0;//赋初值!!!!!! 
                        while(a[i][j]!='-'){
                            len1++;
                            j++;
                        }
                        m=j;
                        j++;
                        while(a[i][j]!='\0'){
                            len2++;
                            j++;
                        }
                        for(k=0;k<len2;k++){
                            sum[k]=a[i][m-1]-a[i][j-1];
                            if(sum[k]<0){
                                a[i][m-2]--;
                                sum[k]=sum[k]+10;
                            }
                            m--;
                            j--;
                        }
                        flag=len1;
                        while(sum[flag-1]==0){
                            flag--;
                            len1--;
                        }//上面也可以这样处理吧 
                        for(j=0;j<len1;j++){
                            result[i][j]=sum[flag-1]+48;
                            flag--;
                        }
                        printf("-");
                        for(j=0;j<len1;j++){
                            printf("%c",result[i][j]);
                        }
                        printf("\n");                
                        break;                            
                        break;
                    } 
                }
            }
        }
    }
    return 0;
}

  • 写回答

7条回答 默认 最新

  • 知行难 2020-12-13 16:49
    关注

    额,代码可以写简介点先吗

    直接劝退,我。。。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址