版权声明:本文为博主原创文章,博客地址:http://blog.csdn.net/weixin_41969587,未经博主允许不得转载。
大整数乘法的大概思路:
用一个一维数组来存储一个大数,每个数组元素存储一个数位,在此基础上实现乘法运算。
下面时大整数乘法代码的实现。可以计算负数的大整数乘法运算!
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int chai(string s,int r[]){ //把数字字符串拆开存放到数组中
int length,i,t=1;
if(s[0]=='-') //若是负数先把"-"清除,chai函数返回值为-1
{
t=-1; //剩下的整数存放到数组中
s.replace(s.find("-"),1,"");
}
length=s.size(); //
for(i=0;i<length;i++){//倒置的形式存放,例如 123,存放为r[0]=3, r[1]=2,r[2]=3
r[i]=s[length-1-i]-'0';
}
return t;
}
void cheng(int m[],int m1,int n[],int n1,int s[]){//m1、n1分别为两数组有效计算长度的终点下标
int i,j;
for(i=0;i<=m1;i++)//对两个数组进行常规的乘法运算
for(j=0;j<=n1;j++){
s[i+j]+=m[i]*n[j];
}
for(i=0;i<=(m1+n1);i++)//进行进位处理
if(s[i]>=10){
s[i+1]+=s[i]/10;
s[i]=s[i]%10;
}
}
int main(){
string str1,str2;
cout<<"输入两个大整数(空格隔开):"<<endl;
while(cin>>str1>>str2){
int m[1000],n[1000],s[1000]={0},m1,n1;
chai(str1,m);
chai(str2,n);
m1=str1.size()-1;
n1=str2.size()-1;
cheng(m,m1,n,n1,s);
cout<<"两数之积为:";
if(chai(str1,m)*chai(str2,n)==1)//判断积为正数
{
if(s[m1+n1+1]==0)
{
for(int i=(m1+n1);i>=0;i--)
cout<<s[i];
cout<<endl;
}
else{
for(int i=(m1+n1+1);i>=0;i--)
cout<<s[i];
cout<<endl;
}
} else if(chai(str1,m)*chai(str2,n)==-1)//判断积为负数
{
if(s[m1+n1+1]==0)
{
cout<<"-";
for(int i=(m1+n1-1);i>=0;i--)
cout<<s[i];
cout<<endl;
}
else{
cout<<"-";
for(int i=(m1+n1);i>=0;i--)
cout<<s[i];
cout<<endl;
}
}
cout<<endl;
cout<<"- - - - - - - - - - - - - - - - - - - - - - - -"<<endl<<endl;
cout<<"输入两个大整数(空格隔开):"<<endl;
}
return 0;
}
代码的效果图如下: