每天都在摸鱼 2022-02-09 14:23 采纳率: 0%
浏览 35

高精度加法,为什么结果中只有一位数不对呢?


#include<iostream>
#include<cstdio>
#include <iomanip>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
    int a[100];
    int b[100];
    int c[100];
    //输入字符数字,用数组存转化后的数字
    //从数组后面开始相加,大于10进1,存个位的数
    string A, B;
    cin >> A >> B;
    for (int i = 0; i < A.length(); i++)
        a[i] = A[i] - 48;
    for (int i = 0; i < B.length(); i++)
        b[i] = B[i] - 48;
    int flag = 0;//标记相加是否大于10,是否需要进位
    for (int j = A.length(); j >= 0; j--)
    {
        
        if (flag == 1)
        {
            c[j] = a[j] + b[j] + 1;
            if (c[j]  >= 10)
            {
                if (j == 0)
                {
                    break;
                }
                c[j] = c[j] % 10;
                
            }
            else
            {
                if (j == 0)
                {
                    break;
                }
                flag = 0;
            }
        }
        if (flag == 0) {
            if (a[j] + b[j] >= 10)
            {
                if (j == 0)
                {
                    c[j] = (a[j] + b[j]);
                    break;
                }
                c[j] = (a[j] + b[j]) % 10;
                flag = 1;
            }
            else
            {
                c[j] = a[j] + b[j];
                if (j == 0)
                {
                    break;
                }
            }
        }
        
    }
    for (int k = 0; k < A.length(); k++)//输出
        cout << c[k];
    cout << endl;
    return 0;
}
    
    

img

正确答案应该是93000044853158582685

  • 写回答

2条回答 默认 最新

  • hsling松子 2022-02-09 14:50
    关注

    高精度加法,为什么结果只有一位数不对
    匿名用户
    C语言高精度加法 位数少的还行 位数一大就出错,求解释,谢谢10
    有奖励写回答共2个回答
    匿名用户
    2011-03-14
    首先说什么情况下会出错:
    结果错误不是因为位数大,而是因为位数差大于1,你可以试下a输111,b输2,结果也会错,并且每次计算结果第一位都不一样。
    分析原因:
    a=1 2 3 \0 x x x …;
    b=1 \0 x x …;
    注意,x可能为任何字符,因为在声明一个数组时不会初始化值,
    所以在运行exchange()后得到:
    a=3 2 1\0 x x x
    b=1 \0 x x x
    故c= 4 2 x \0 x x
    再运行exchange()得到c= x 2 4 \0 x x 故输出结果第一位是不可预料的
    故而应将条件i<plen||i<qlen改为i<plen&&i<qlen,多出来的几位直接赋值(注意考虑进位影响哦)

    评论

报告相同问题?

问题事件

  • 创建了问题 2月9日

悬赏问题

  • ¥15 readimage函数怎么读取变量图片地址
  • ¥50 网课里面实习定位打卡
  • ¥50 Delphi 非客户区窗口阴影?
  • ¥15 cv2 morphologyEx函数报错
  • ¥15 有没有知道鸿蒙OS高级开发者新题答案的
  • ¥15 有没有人能帮我一下android
  • ¥20 做一个干部信息管理系统 软件
  • ¥15 通过4G模块EC600N向阿里云物联网平台物模型上面发送字符串,现在发送int数据是成功的,发送字符串就是不成功
  • ¥15 IDA反编译,代码识别失败
  • ¥70 matlab代码修改