大整数乘法的原理很简单,就是模拟经典的手算步骤
#include <iostream>
#include <cstring>
using namespace std;
void reverse_str(char *a,int size){
for(int i=0;i<size/2;++i){
char t=a[i];
a[i]=a[size-i-1];
a[size-i-1]=t;
}
}
void large_num_mul(){
char a[1000]={0};
char b[1000]={0};
char c[2001]={0};
cin>>a;
cin>>b;
int a_len=strlen(a);
int b_len=strlen(b);
reverse_str(a,a_len);
reverse_str(b,b_len);
for(int i=0;i<b_len;++i){
for(int j=0;j<a_len;++j){
int k=i+j;
c[k]+=(a[j]-'0')*(b[i]-'0');
if(c[k]>9){
c[k+1]+=(c[k]/10);//这里的两个赋值不能写颠倒了,要注意c[k]值的先后变化.
c[k]=c[k]%10;
}
}
}
int j;
for(j=a_len+b_len;j>0;--j){
if(c[j]!=0){
break;
}
}
for(int i=j;i>=0;--i){
cout<<(int)c[i];
}
cout<<endl;
}
int main()
{
large_num_mul();
return 0;
}
add (string版本)
string large_num_mul(string &a,string &b){
char result[2500]={0};
char c[2500]={0};
int a_len=a.size();
int b_len=b.size();
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(int i=0;i<b_len;++i){
for(int j=0;j<a_len;++j){
int k=i+j;
c[k]+=(a[j]-'0')*(b[i]-'0');
if(c[k]>9){
c[k+1]+=(c[k]/10);
c[k]=c[k]%10;
}
}
}
int j;
for(j=a_len+b_len;j>0;--j){
if(c[j]!=0){
break;
}
}
int pos=0;
for(int i=j;i>=0;--i){
result[pos++]=c[i]+'0';
}
string result_str(result);
return result_str;
}