#include<iostream> #include<iomanip> #include<vector> #include<string> #include<fstream> using namespace std; //ofstream fout("result.txt"); void bigNumMul(long int x,long int y) { int a[64]={0}; int b[64]={0}; int c[64]={0}; long t; if(x<y) {t=x;x=y;y=t;} long m=x; int a_num=0; //把x每位数分别存入数组 for(int i=0;i<64;i++) { a[i]=m%10; a_num++; m=m/10; if(m==0) break; } //for(i=63;i>=0;i--) // cout<<">>"<<a[i]; //cout<<endl; long n=y; int b_num=0; //把y每位数分别存入数组 for(i=0;i<64;i++) { b[i]=n%10; b_num++; n=n/10; if(n==0) break; } //cout<<a_num<<"...."<<b_num<<endl; //中间数的存放位为num+1 const int _a_num=a_num+1; vector<int>mid_val; for(i=0;i<_a_num;i++) { mid_val.push_back(0); } //cout<<"............."<<mid_val.size()<<endl; for(i=0;i<b_num;i++) { int backAdd=0;//backAdd为乘积的进位数 for(int j=0;j<=a_num;j++) { int product=a[j]*b[i];//两个位数乘积 int sum=product+backAdd; mid_val[j]=sum%10; //cout<<mid_val[j]<<endl; backAdd=sum/10; } backAdd=0;//一行积的一位与另一行积的一位相加的进位数 for(int k=i;k<=i+a_num;k++) { int sum=c[k]+mid_val[k-i]+backAdd; c[k]=sum%10; backAdd=sum/10; //cout<<">>"<<mid_val[k-i]<<endl; } //cout<<endl<<endl; } //for(i=63;i>=0;i--) // cout<<c[i]; int startBit=0; for(i=63;i>=0;i--) { //cout<<"st..."<<c[i]; if(c[i]!=0) { startBit=i; break; } } for(i=startBit;i>=0;i--) { cout<<c[i]; } //cout<<endl; } /* void main() { //a,b取值范围为[0,2147483647] //long a=12346; //long b=56; //cout<<"这个积为:"; //bigNumMul(2147483647,2147483647); //cout<<"."<<endl; if(!fout) { cout<<"error!"; } for(long i=1;i<=2147483647;i++) { bigNumMul(i,i); } fout.close(); } */