P!NK_MF 2022-09-25 09:15 采纳率: 60%
浏览 19

杭电oj1002不明WA

杭电oj1002 高精度加法
测试什么的感觉都没问题,但是始终是WA
题目如下

img

我的代码如下
    #include <iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstdlib>
    #include<minmax.h>
    using namespace std;

    char s1[1050]={0},s2[1050]={0};
    int a[1050]={0},b[1050]={0},c[1050]={0};

    int main()
    {
        int n=1;
        int lena,lenb,lenc,T;
        while(scanf("%d",&T) != EOF){

        while(T--){
        scanf("%s%s",&s1,&s2);
        lena = strlen(s1);
        lenb = strlen(s2);
        for(int i=0; i<lena; i++)
            a[lena-i] = s1[i] - '0';
        for(int i=0; i<lenb; i++)
            b[lenb-i] = s2[i] - '0';
        lenc = max(lena,lenb) + 1;
        for(int i=1; i<=lenc; i++){
            c[i] += a[i] + b[i];
            c[i+1] = c[i]/10;
            c[i] = c[i]%10;
        }
        for(int i=1; i<=lenc; i++){
            if(c[lenc] == 0 && lenc > 0)
            {
                lenc--;
                if(lenc==1)
                    break;
            }
        }
        printf("Case %d:\n",n++);
        printf("%s + %s = ",s1,s2);

        for(int i=lenc; i>0; i--){
            printf("%d",c[i]);
            c[i] = 0;
        }
        printf("\n");
        if(T != 0)
        printf("\n");
        }
        n = 1;

        }
        return 0;
        }




  • 写回答

1条回答 默认 最新

  • harmis_yz 2022-09-25 10:01
    关注
    
    #include<bits/stdc++.h>
    
    using namespace std; 
    
    int a[1000],b[1000],c[1000]; 
    
    void init1(int a[])
    {
        char s[1000];//通过字符数组的形式输入数字 
        
        gets(s);
        
        a[0]=strlen(s);//a[0]保存字符数组s的位数 
        
        for(int i=1;i<=a[0];i++)
        {
            a[i]=s[a[0]-i]-'0';//将字符数组转换为整形数组,并逆序储存 
        }
    }
    
    void init2(int a[])
    {
        string s;//通过字符串的形式输入数字 
        
        getline(cin,s);//或cin>>s; 
        
        a[0]=s.size();//a[0]保存字符串s的位数 或s.length(); 
        
        for(int i=1;i<=a[0];i++)
        {
            a[i]=s[a[0]-i]-'0';//将字符串转换为整形数组,并逆序储存 
        }
    }
    
    void jiafa(int a[],int b[],int c[])
    {
        int x=0;//暂存进位,从0开始  
        int i=1;//位数的下标 
        
        while(i<=a[0]||i<=b[0])
        {
            c[i]=a[i]+b[i]+x;//对应位相加+上一次的位数 
            
            x=c[i]/10;//进位 
            
            c[i]=c[i]%10;//进位后剩下的数字 
            
            i++;//模拟下一位 
        }
        
        c[i]=x;//最后的位数 
        c[0]=i;//将和c的位数统一保存在c[0]中 
    }
    
    void aa(int a[])//删除数组a的前导0 
    {
        while(a[0]>=1&&a[a[0]]==0)
        {
            a[0]--;    
        }    
    } 
    
    int main()
    {
        init1(a);
        init1(b);//输入    
        
        aa(a);
        aa(b);//删除前导0
        
        jiafa(a,b,c);//a+b=c
        
        aa(c);//删除c的前导0
        
        for(int i=c[0];i>=1;i--)
        {
            cout<<c[i];//输出每一位    
        } 
    } 
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月25日

悬赏问题

  • ¥15 angular有偿编写,
  • ¥15 VB.NET使用保存对话框保存图片?
  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错