0
已解决
王源松
新手光能
新手光能
#include <iostream>
#include <string>
using namespace std;
string a1,b1,c1;
int a[100000],b[1000000],c[10000000],jw;
void w(){
a[0]=a1.size();
b[0]=b1.size();
c[0]=max(a[0],b[0]);
for(int i=0;i<a[0];i++){
a[a[0]-i]=a1[i]-'0';
}
for(int i=0;i<b[0];i++){
b[b[0]-i]=b1[i]-'0';
}
for(int i=1;i<=c[0];i++){
c[i]=a[i]+b[i]+jw;
jw=c[i]/10;
c[i]%=10;
}
if(jw){
c[0]++;
c[c[0]]=jw;
}
for(int i=c[0];i>=1;i--){
cout<<c[i];
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a1>>b1;
w();
if(i!=n)
cout<<endl;
}
return 0;
}
为什么0分???
求大佬解答;
0
0
0
张舒斌
中级光能
中级光能
这道题需要使用到高精度。
string x,y;
cin>>x>>y;
int lena,lenb,lenc=0;
int jw=0;
lena=x.size();
lenb=y.size();
for(int i=0;i<lena;i++)
{
a[i]=x[lena-1-i]-48;
}
for(int i=0;i<lenb;i++)
{
b[i]=y[lenb-1-i]-48;
}
首先,定义字符串,用数组逆向(这对下面的运算非常重要)存放进去。由于这是全局变量,数组自动赋值为“0”
接下来:
while(lenc<lena||lenc<lenb)
{
c[lenc]=a[lenc]+b[lenc]+jw;
if(c[lenc]>=10)
{
c[lenc]-=10;
c[lenc+1]++;
jw=1;
}
else
{
jw=0;
}
lenc++;
}
用数组模拟我们平常的竖式计算由于是反向存放进数组里的,所以当位数不同时,自动补全的零会按照高精度加法的模拟运算进行相加。注意,如果有进位还要把进位加上
最后输出:
if(jw==1)
{
cout<<jw;
}
for(int i=lenc-1;i>=0;i--)
{
cout<<c[i];
}
输出依然要注意进位,因为如果是99+1的话,得数是100,但进位一旦忽略,结果就会是00
数组定义自己加,根据我讲述的流程适当的定义数组(当然,还有考虑到数据范围的多少来定义,还有,我只是对一组数字进行高精度运算,如何进行多组数运算,自己想,提供代码只供参考,并非标准答案)
张舒斌在2018-07-24 12:37:21追加了内容
望采纳