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日

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染