高精度乘法

#include<bits/stdc++.h>
using namespace std;
const int p=1000;
const int N=1000;
string s[2];
int num[4]={1,10,100,1000};
int a[2][N],l[2];
int sum[N*2];
int iter,itera,tmp;
int main(){
    ios::sync_with_stdio(false);
//  cout<<s[0].size()<<' '<<s[1].size()<<endl;
    for(int k=0;k<=1;k++){
    cin>>s[k];
    int shouwei0=0;
    while(*(s[k].begin()+shouwei0)==48) //string的器到底指向哪儿啊????? 
    shouwei0++;
    reverse(s[k].begin(),s[k].end());
//  cout<<s[k]<<' '<<s[k].size()-shouwei0<<endl;    //success;
    itera=0;
    for(int i=0;i<s[k].size()-shouwei0;i++){
        if(iter==3){
            a[k][itera++]=tmp;
            tmp=0;
            iter=0;
        }
        tmp+=(s[k][i]-48)*num[iter++];
    }
    if(tmp){
        a[k][itera++]=tmp;
        tmp=0;
        iter=0;
    }
    l[k]=itera;
/*  for(int i=l[k]-1;i>=0;i--){
        if(i==l[k]-1)   printf("%d",a[k][i]);
        else printf("%04d",a[k][i]);
    }
    cout<<endl;
*/  }
    //开始乘了;
//  cout<<l[0]<<' '<<l[1]<<endl;    //success;
    for(int i=0;i<l[0];i++)
    for(int j=0;j<l[1];j++){
        sum[i+j]+=a[0][i]*a[1][j];
//      cout<<sum[j]<<endl;     //success;
//      system("pause");
    } 
    int flag=0;
    for(int i=N*2-1;i>=0;i--)
        if(sum[i]){
            flag=i;
            break;  //注意break; 
        }
    for(int i=0;i<=flag;i++){
        sum[i+1]+=sum[i]/p;
        sum[i]%=p;
    }
    for(int i=N*2-1;i>=0;i--)
        if(sum[i]){
            flag=i;
            break;  //注意break; 
        }
    int beacon=0;

    for(;flag>=0;flag--){
        if(!beacon){
            printf("%d",sum[flag]);
            beacon=1;
        }
        else printf("%03d",sum[flag]);
    }
    return 0;
}

万进制并不稳定
数据大了之后乘法表中间的还是超了int范围
所以改用千进制过了洛谷这题;

fbi warning wwwwwwwwwwww

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值