追风少年_9 2022-08-03 11:38 采纳率: 78.6%
浏览 72
已结题

noi 1.6 10:大整数加法结果出错

问题遇到的现象和发生背景

10:大整数加法
总时间限制: 1000ms 内存限制: 65536kB
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
来源
程序设计实习2007

问题相关代码,请勿粘贴截图
#include<bits/stdc++.h>

using namespace std;

int main()
{
 string az,bz;
    cin>>az>>bz;
    int a[strlen(az.c_str())],b[strlen(bz.c_str())];
    for(int i=0;i<strlen(az.c_str());i++)
    {
        a[i]=az[i]-'0';
    }
    for(int i=0;i<strlen(bz.c_str());i++)
    {
        b[i]=bz[i]-'0';
    }
    int g=strlen(az.c_str())>=strlen(bz.c_str())?strlen(az.c_str()):strlen(bz.c_str());
    int h[g+1];
    memset(h,0,sizeof(h));
 for(int i=0;i<=g;i++)
 {
     if(a[i]+b[i]>=10)
     {
         h[i+1]+=1;
         h[i]+=(a[i]+b[i])%10;
        }
        else
        {
            h[i]=a[i]+b[i];
        }
    }
    bool l=false;
    int i;
 for(i=200;i>=0;i--)
 {
     if(h[i]!=0)
         l=true;
     if(l==true)
            cout<<h[i];
    }
 return 0;
}

运行结果及报错内容

输入:
22222222222222222222
33333333333333333333
输出:
199323377300000000000419969100000000000030975721-744678956000000000000000000000000000000051334240250004199348000000010116816016025011151677721621202016019022929920190229291220101144880200229281632896508421504500300200101147843355443858993459030020010115936000200002000020000202222222222222222222233333333333333333333049164481255555555555555555555

我想要达到的结果

输入:
22222222222222222222
33333333333333333333
输出:
55555555555555555555

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-08-03 11:40
    关注

    for(i=200;i>=0;i--)
    这里为啥从200开始输出啊???
    200改为g

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月12日
  • 已采纳回答 8月4日
  • 修改了问题 8月3日
  • 创建了问题 8月3日