高精度乘法c++代码

#include<iostream>
#include<string>
using namespace std;
int x[50000], y[50000], z[250000000]={0}, p=0;
//数组开到50000,支持50000位乘50000位的算式,代价就是占内存。 
int main()
{    
    string a,b;    
    cin>>a>>b;//输入因数     
    for(int i=0; i<a.size(); i++){
        x[i] = a[a.size()-i-1]-48;
    }   
    for(int i=0; i<b.size(); i++){
        y[i] = b[b.size()-i-1]-48;
    }//这两步是把字符串转换成 数字,存在一个数组里。    
    //这样方便计算,但是如果不转换也可以,只是麻烦一些。     
    for(int i=0; i<a.size(); i++){        
        for(int j=0; j<b.size(); j++){            
            z[i+j] += x[i]*y[j];//将积存在另一个数组里。             
            while(z[i+j] > 9)
                    z[i+j]-=10,z[i+j+1]++;//进位        
        }    
    }    
    for(int i=a.size()+b.size()-1; i>=0; i--){  //输出
      if(z[i]==0 && p==0 && i!=0)
            continue;//判断最高位是否是0,如果是则不输出。         
        else 
            p=1;        
        cout<<z[i];    
    }    
    return 0;//最好还是返回一下,养成好习惯。 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值