大整数乘法

版权声明:本文为博主原创文章,博客地址: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;
}

代码的效果图如下:
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值