大整数乘法

版权声明:本文为博主原创文章,博客地址:http://blog.csdn.net/weixin_41969587,未经博主允许不得转载。

大整数乘法的大概思路:

用一个一维数组来存储一个大数,每个数组元素存储一个数位,在此基础上实现乘法运算。

下面时大整数乘法代码的实现。可以计算负数的大整数乘法运算!

#include
#include
#include
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//倒置的形式存放,例如 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<<"输入两个大整数(空格隔开):"<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<cout<else{
          for(int i=(m1+n1+1);i>=0;i--)
          cout<cout<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<cout<else{
      cout<<"-";
          for(int i=(m1+n1);i>=0;i--)
          cout<cout<cout<cout<<"- - - - - - - - - - - - - - - - - - - - -  - - -"<cout<<"输入两个大整数(空格隔开):"<return 0;
}

代码的效果图如下:
大整数乘法_第1张图片

你可能感兴趣的:(C++)