读书人

笔考试题:两个30位的数相乘

发布时间: 2012-10-10 13:58:11 作者: rapoo

笔试题:两个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;}
[解决办法]
探讨
把每个数字分成两部分好了!比如说:A:a,b;B:c,d;然后进行运算好了!

读书人网 >C++

热点推荐