我第二次自己研究高精度算法(加法)。
我试了试,发现小一点的数字运算是正常的,可是数字大了后还是会出错。
代码
#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
主要是,出错时输入相同的数据每回返回的结果还各不相同。这是不符合算法的特点的。请问是什么原因呢?算法不稳定吗?