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

杭电OJ1002 高精度A+B运算

做杭电OJ1002的过程中遇到了亿些问题
自己在编译器上运行正常,但在OJ平台上就wrong answer了
希望帮忙看下问题在哪 T-T
    #include <iostream>
    #include<cstring>
    #include<cstdio>
    #include<cstdlib>
    #include<minmax.h>
    using namespace std;

    char s1[1005],s2[1005];
    int a[1005]={0},b[1005]={0},c[1005]={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");
        }
        }
        return 0;
        }






img

  • 写回答

1条回答 默认 最新

  • Xa_L 嵌入式领域优质创作者 2022-09-19 10:29
    关注
    
    1、示例:
    #include <stdio.h>
    #include <math.h>
    int main()
    {
        long a,b,sum;
        scanf("%ld%ld\n",&a,&b);
        sum = a + b;
        printf("%ld\n",sum);
        return 0;
    }
     
     
    2、示例:超长(超100位)加法运算
     
    #include <stdio.h>
    #include <string.h>
    #define  N 10000
     
    int main()
    {
        char num1[N] = {0},num2[N] = {0},result[N]={0};
        long len_1,len_2,len;
        int i;
        scanf("%s %s",num1,num2);
        
        len_1 = strlen(num1);
        len_2 = strlen(num2);
        len = (len_1>len_2) ? len_1:len_2;
        len++;
        
        for(i = 0 ;i<len_1&&i<len_2; i++)
        {
            result[len-1-i] = (num1[len_1-1-i] - '0') + (num2[len_2-1-i] - '0');
        }
     
        if(len_1 >len_2)
        {
            for(;i<len_1;i++)
            {
                result[len-1-i] = num1[len_1-1-i] - '0';
            }
     
        }
        else
        {
            for(;i<len_2;i++)
            {
                result[len-1-i] = num2[len_2-1-i] - '0';
            }
        }
     
        for(i = len - 1;i>0;i--)
        {
            if(result[i]>=10)
            {
                result[i] = result[i]%10;
                result[i-1]++;
            }
         }
         
         //判断是后位数多出一位 9+8=17变成2位数,如果没有则全部前移。并变回数字的ASC2码 
         if(result[0]!= 0)
         {
             for(i = 0;i<len;i++)
             {
                 result[i] += '0';
             }
             result[len] = '\0';
          }
         else
         {
             for(i=1;i<len;i++)
             {
                 result[i-1] = result[i] + '0';
             }
             result[len-1] = '\0';
          }
          
          printf("两个数相加的结果是:\n");
          puts(result);
          
         return 0;
     
    }  
     
     
    3、OJ通过的答案
     
    #include <stdio.h>
    int main()
    {
        int a,b;
        while(scanf("%d %d",&a,&b)==2)
        {
           printf("%d\n",a+b);
        }
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 修改了问题 9月19日
  • 修改了问题 9月19日
  • 创建了问题 9月19日

悬赏问题

  • ¥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内存报错