您的位置:首页 > 其它

【洛谷】高精度算法

2020-04-05 12:15 16 查看

高精度算法

题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b<=10^{500}a,b<=10
500
输出格式
输出只有一行,代表a+b的值
输入 #1
1
1
输出
2

说难不难,就是数字太长,导致编译器自带的+ - * /只对int long有效,而超限就会乱码。这时候引入string,算法思路和笔算一样,从最后一个开始加并且进位
这时候需要将2个string类进行比较,短的后面加0补齐,然后反转相加,再反转输出即可,代码如下:

">using namespace std;
int main()
{
string s1,s2,s3; //举例 s1为99 s2为111
cin>>s1;
cin>>s2;
int len; //例为3
len=max(s1.length(),s2.length()); //较长的长度
reverse(s1.begin(),s1.end()); //反转s1
reverse(s2.begin(),s2.end()); //反转s2
for(int i=s1.length();i<len;i++)
{
s1+='0';
} //s1变为990
for(int i=s2.length();i<len;i++)
{
s2+='0';
} //s2 111
int a=0; //定义a为进位数 如7+8进1 a=1
for(int i=0;i<len;i++)
{
int k;
k=a+(s1[i]-'0')+(s2[i]-'0'); //加进位求和
s3+=(k%10)+'0'; //对10取余
a=k/10; //进位
}
if(a) //若最后a不位0 直接最高位为a 例如99+111=1010
s3+=a+'0';
reverse(s3.begin(),s3.end()); //反转即可
cout<<s3;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
Liquor___ 发布了30 篇原创文章 · 获赞 1 · 访问量 776 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: