又是刚学c++的朋友,学会了A+B的问题后,就自己编程序用来算各种数,但是有时候算二三十位的时候,系统就会错误,这是为什么呢?\
因为c++里定义的变量有限制,即使是最大的long long也只能承受十九位的数,这时候我们就要换一种算法了,高精度.
高精度主要用的是数组各个位相对
主要代码位
z=a[i]+b[i]+z;
这里有个魔鬼细节:但我的两个最大位相加时,可能会多出一位,而我们的数组就少了一位,变要加长数组的长度;。
if(z[lc]!=0)
{
lc++;
}
上全代码
#include<iostream>
#include<cstdio>
using namespace std;
string a,b;
int la,lb,lc,x[1010],y[1010],z[1010],k;
int main()
{
cin>>a;
cin>>b;
la=a.length();
lb=b.length();
for(int i=0;i<la;i++)
{
x[i]=a[la-1-i]-48;
}
while(x[la-1]==0)
{
la--;
}
for(int i=0;i<lb;i++)
{
y[i]=b[lb-1-i]-48;
}
while(y[lb-1]==0)
{
lb--;
}
if(la>lb)
{
lc=la;
}
else lc=lb;
for(int i=0;i<lc;i++)
{
k=x[i]+y[i]+z[i];
z[i]=k%10;
z[i+1]=k/10;
}
if(z[lc]!=0)
{
lc++;
}
for(int i=lc-1;i>=0;i--)//最后要倒着输入数组
{
cout<<z[i];
}
return 0;
}
可以去信息学奥赛一本通(C++版)在线评测系统网上1168上测试