开开心心happyheart 2024-02-18 12:18 采纳率: 81.8%
浏览 9
已结题

C++高精度加法,数字大了会出错

我第二次自己研究高精度算法(加法)。
我试了试,发现小一点的数字运算是正常的,可是数字大了后还是会出错。


代码

#include <iostream>
#include <string>
#include <cmath>
#define str string
#define ll long long
using namespace std;
str a, b, c, t;
ll w, m, x;
int main (){
    cin>>a>>b;
    if(a.size()<b.size()){
        t=a;
        a=b;
        b=t;
    }
    w=a.size();
    m=b.size();
    for(ll i=0; i<m; i++){
        a[w-1-i]+=b[b.size()-1-i]-48;
    }
    for(ll i=w; i>0; i--){
        x=a[i-1]-48;
        while(x>=10){
            x-=10;
            c[i-1]++;
        }
        c[i]+=x+48;
    }
    if(c[0]){
        cout<<"1";
    }
    for(ll i=1; i<=w; i++){
        cout<<c[i];
    }
    return 0;
}

try1(成功)

输入

123456789
987654321

输出

1111111110

try2(失败)

输入

999999999999999999999999999
111111111111111111111111111

输出

1111111111111111彴$;1=L110

主要是,出错时输入相同的数据每回返回的结果还各不相同。这是不符合算法的特点的。请问是什么原因呢?算法不稳定吗?

img

  • 写回答

5条回答 默认 最新

  • 开开心心happyheart 2024-02-18 12:48
    关注

    string改成char数组就可以。

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cmath>
    #define str string
    #define ll long long
    using namespace std;
    char a[1024], b[1024], c[1024], t[1024];
    ll w, m, x;
    int main (){
        cin>>a>>b;
        if(strlen(a)<strlen(b)){
            int y=strlen(b);
            for(int i=0; i<y; i++){
                t[i]=a[i];
                a[i]=b[i];
                b[i]=t[i];
            }
        }
        w=strlen(a);
        m=strlen(b);
        for(ll i=0; i<m; i++){
            a[w-1-i]+=b[m-1-i]-48;
        }
        for(ll i=w; i>0; i--){
            x=a[i-1]-48;
            while(x>=10){
                x-=10;
                c[i-1]++;
            }
            c[i]+=x+48;
        }
        if(c[0]){
            cout<<"1";
        }
        for(ll i=1; i<=w; i++){
            cout<<c[i];
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月4日
  • 已采纳回答 2月25日
  • 创建了问题 2月18日

悬赏问题

  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 python的EOFError该怎么解决?
  • ¥15 Fluent,液体进入旋转区域体积分数不连续
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包
  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 layui数据重载无效
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程