高精度乘法

  1. 问题http://codevs.cn/problem/3117/
  2. #include<iostream>
  3. #include<string>
  4. using namespace std;
  5. string a,b;
  6. string jg[10];//从0-9结果集
  7. string  addtion(string a,string b){
  8.     //翻转、补零操作
  9.     int max_length=a.length()>b.length()? a.length():b.length();
  10.     string str;
  11.     for(int i=0;i<a.length();i++){
  12.         str+=a[a.length()-1-i];
  13.     }
  14.     a=str;str="";
  15.     for(int i=0;i<b.length();i++){
  16.         str+=b[b.length()-1-i];
  17.     }
  18.     b=str;str="";
  19.     
  20.     for(int i=a.length();i<max_length;i++){
  21.         a+="0";
  22.     }
  23.     for(int i=b.length();i<max_length;i++){
  24.         b+="0";
  25.     }
  26.     
  27.     
  28.      int c=0;
  29.     string r;
  30.     for(int i=0;i<a.length();i++ ){
  31.         int x=a[i]-'0';
  32.         int y=b[i]-'0';
  33.         int jieguo=(x+y+c)%10;
  34.         c=(x+y+c)/10;
  35.         r+=(char)(jieguo+'0');
  36.     }
  37.     if(c==0)return r;
  38.     return r+=(char)(c+'0');
  39. }
  40. void re(string& x){
  41.     string str;
  42.     for(int i=0;i<x.length();i++){
  43.         str+=x[x.length()-1-i];        
  44.     }
  45.     x=str;
  46. }
  47. void jl(string& x,int n){
  48.     for(int i=0;i<n;i++){
  49.         x+='0';
  50.     }
  51.     
  52. }
  53. string dcheng(int x,string str){
  54.     string r;
  55.     int c=0;
  56.     re(str);
  57.     for(int i=0;i<str.length();i++){
  58.         int y=str[i]-'0';
  59.         r+=(char)((x*y+c)%10+'0');
  60.         c=(x*y+c)/10;
  61.     }
  62.     if(c==0){
  63.         re(r);
  64.         return r;
  65.     }else{
  66.         
  67.         r+=(char)(c+'0');
  68.         re(r);
  69.         return r;
  70.     }
  71. }
  72. int main(){
  73.     
  74.     
  75.     
  76.     cin>>a>>b;
  77.     re(b);    
  78.     string c="0";//结果
  79.     
  80.     for(int i=0;i<b.length();i++){//使用b乘以a
  81.          int x=b[i]-'0';
  82.          if(jg[x]==""){
  83.              jg[x]=dcheng(x,a);    
  84.          }        
  85.          string t=jg[x];
  86.          jl(t,i);//补零
  87.          c=addtion(c,t);
  88.          re(c);
  89.         
  90.     }
  91.     cout<<c<<endl;
  92.     
  93.     return 0;
  94. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值