笔试题:两个30位的数相乘
[code=C/C++][/code]
string Cac(string a,string b)
{
}
a,b都是大于等30位的数,用string类型表示
[解决办法]
要做大数乘法,不然直接做会溢出.
[解决办法]
把每个数字分成两部分好了!比如说:A:a,b;B:c,d;然后进行运算好了!
[解决办法]
//下面是我上曾经写过的一个,但是只能是实现2的倍数的大整数乘法,希望能给lz一点思路!有点算法的意味...
- C/C++ code
#include <iostream>#include <sstream>#include <string>#include <cmath>using namespace std;long string_to_num(string k)//string字符串变整数型例如str=“1234”,转换为整数的1234.{ long back; stringstream instr(k); instr>>back; return back; }long ff(string x,string y)//递归函数{ int s = x.size(); string A,B,C,D; if( s > 1) { A = x.substr(0,s/2); B = x.substr(s/2,s-1); C = y.substr(0,s/2); D = y.substr(s/2,s-1); } long na = string_to_num(A); long nb = string_to_num(B); long nc = string_to_num(C); long nd = string_to_num(D); long long result = 0; if( s == 2) { result = (na*10+nb) * (nc*10+nd); } else{ result = ff(A,C)*pow(10.0,s)+((na-nb)*(nd-nc)+ff(A,C)+ff(B,D))*(long long)(pow(10.0,s/2))+ff(B,D); } return result;}int main(){ string A,B,C,D; string num1,num2; long long r; cin>>num1>>num2; int size = num1.size(); A = num1.substr(0,size/2); B = num1.substr(size/2,size-1); C = num2.substr(0,size/2); D = num2.substr(size/2,size-1); cout<<A<<" "<<B<<" "<<C<<" "<<D<<endl; r = ff(num1,num2); cout<<num1<<" "<<"*"<<" "<<num2<<" "<<"="<<" "<<r<<endl; return 0;}
[解决办法]