Problem Description
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。由于RSA算法加密强度高、原理简洁易懂以及专利限制已过期等优势,被越来越多的共享软件采用。
RSA要依赖大数的运算,目前主流RSA算法都建立在512位到1024位的大数运算之上,而我们一般程序设计语言的整数类型能够表示数据范围是有限的(一般不超过64位)。请你试着模拟实现RSA的加法计算过程吧,你的任务:求两个不超过200位的非负整数的和。
Input
输入有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
Output
输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出0342。
Example Input
22222222222222222222222222222222222222
33333333333333333333333333333333333333
Example Output
55555555555555555555555555555555555555
题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2046.html
代码:加法模板
#include<bits/stdc++.h>
using namespace std;
string sum(string s1, string s2)
{
if(s1.length() < s2.length())
{
string tem = s1;
s1 = s2;
s2 = tem;
}
int i, j;
for(i = s1.length() - 1, j = s2.length() - 1; i >= 0; i--, j--)
{
s1[i] = s1[i] + ((j >= 0) ? s2[j] - '0' : 0);//注意细节
if(s1[i] - '0' >= 10)
{
s1[i] = (s1[i] - '0') % 10 + '0';
if(i) s1[i - 1]++;
else s1 = '1' + s1;
}
}
return s1;
}
int main()
{
string s1, s2;
while(cin >> s1 >> s2)
{
s1 = sum(s1, s2);
cout << s1 << endl;
}
}