fangyxp 2021-09-25 20:15 采纳率: 100%
浏览 18
已结题

帮我康康,这个高精度加法哪里有问题,蟹蟹

帮我看看,急!

#include<bits/stdc++.h>
using namespace std;
char sa[1010],sb[1010];
int la,lb,lc,a[1010],b[1010],c[1010];
int main()
{
    cin >> sa >> sb;
    la = strlen(sa);
    lb = strlen(sb);
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    for(int i=0;i<=la;i++)
        a[i]=sa[i]-'0';
    for(int i=0;i<=lb;i++)
        a[i]=sb[i]-'0';
    lc = la > lb ? la : lb;
    memset(c,0,sizeof(c));
    for(int i=0;i<lc;i++)
    {
        c[i]=a[i]+b[i]+c[i];
        if(c[i]>=10)
        {
            c[i+1] = 1;
            c[i] -= 10;
        }
    }
    if(c[lc]>0)lc++;
    for(int i=0;i<lc;i++)
        cout<<lc[i];
    return 0;
}

就是输入sa,sb,转到a,b里面,然后加起来,再算进位,有问题吗?
有,还是编译错误,没发现哪错了

  • 写回答

2条回答 默认 最新

  • 泡视界 2021-09-26 09:57
    关注

    问题蛮多的:

    1. Main.cc:29:19: error: invalid types ‘int[int]’ for array subscript 是说你的第29行 cout<<lc[i]; 这一句,lc是个int,不是数组,不能用括号 [ ]进行其值的引用。
    2. 第15行 a[i]=sb[i]-'0'; 这一句应该改为 b[i]=sb[i]-'0';
    3. 没考虑数组溢出的情况,也就是当输入数据超过了1010后的情况,
    4. 第12行和14行的循环条件 for(int i=0;i<=la;i++) 这样写的话会将输入字符串的结尾字符\0 也纳入转换成数字的计算中,应该为 for(int i=0;i<la;i++)
    5. 致命错误:结果转为两数和保存在 c的过程没考虑低位对齐的要素。比如 222 + 3333,你的算法的结果为 5553, 但实际需要低位对齐得出 3555。
      以上,好好修改
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月26日
  • 创建了问题 9月25日

悬赏问题

  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch