【大数相加】SDUT 2046 RSA加密运算

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值