概述
题目描述
给定一些大数,请计算其和。
输入
输入数据中含有一些数据组(数量≤100),每组数据由一个整数n(n≤100)领衔,后跟n个大数(大数位数≤200),若n=0则表示输入结束。
输出
输出每组数据所计算的大数和,每个结果单独占一行。
样例输入
2
123123123123123123123123123123123
-2
2
43242342342342
-1234567654321
0
样例输出
123123123123123123123123123123121
42007774688021
一道高精度的经典题目,但是要考虑负数。
我这里用的是先加后去前导0的方法。
#include <iostream>
#include <cstdio>
using namespace std;
string sum(string a,string b)
{
for(int i=202-1;i>=0;i--)
{
a[i]=a[i]+b[i]-'0';
if(a[i]>'9'){
a[i]-=10;
a[i-1]++;
}
}
return a;
}
string opp(string a){
for(int i=0;i<a.length();i++)
a[i]='9'-a[i]+'0';
a=sum(a,string(201,'0')+'1');
return a;
}
int main()
{
string a,b;
int n;
while(cin>>n&&n!=0)
{
cin>>a;
if(a[0]=='-')
{
a=a.substr(1);
a=string(202-a.length(),'0')+a;
a=opp(a);
}
else
a=string(202-a.length(),'0')+a;
for(int i=0;i<n-1;i++)
{
cin>>b;
if(b[0]=='-')
{
b=b.substr(1);
b=string(202-b.length(),'0')+b;
b=opp(b);
}
else
b=string(202-b.length(),'0')+b;
a=sum(a,b);
}
if(a[0]=='9')
{
a=opp(a);
cout<<"-";
}
int p=a.find_first_not_of('0');
if(p==-1)
cout<<"0"<<endl;
else
cout<<a.substr(p)<<endl;
}
return 0;
}
最后
以上就是明理可乐为你收集整理的大数和的全部内容,希望文章能够帮你解决大数和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复