大数运算(二) —— 大数加法
注:本程序适用于100000位以内的加法运算,效率很高,在内存和时间允许的情况下可完成10^8位的加法运算
下面用实例来模拟一下我的方法:
输入:a=1234567890123456789 b=9876543210987654321
a : 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1
b : 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
10 10 10 10 10 10 10 10 10 0 10 10 10 10 10 10 10 10 10
0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
输出:11111111101111111110
#include <iostream>#include <cstring>using namespace std;int main(){ char a[100050],b[100050]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); cin>>a>>b; strrev(a); strrev(b); for(int i=0; i<strlen(a); i++) { if(b[i]) b[i]+=a[i]-'0'; else b[i]+=a[i]; } for(int i=0; i<strlen(b); i++) if(b[i]>'9') { if(b[i+1]) b[i+1]++; else b[i+1]+='1'; b[i]-=10; } strrev(b); cout<<b<<endl; return 0;}
- 1楼jiangbin00cn昨天 12:51
- 应该将a,b转换为2进制后进行计算,然后再转换为数字输出,用字符0-9进行运行的效率太低了。
- Re: clevermike昨天 19:16
- 回复jiangbin00cnn你有考虑过代码量的问题吗?
- Re: jiangbin00cn昨天 20:51
- 回复clevermiken用建库的方法将运算转换为多个大数加法。
- Re: jiangbin00cn昨天 21:27
- 回复clevermike字符串转化为二进制有代码量的问题?以前有写过,不过只有100位十进制,原理相同。用到大数计算的地方一般都是多次计算,用你的思路做DH算法试试。