高精度乘法

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[101],b[101];
int len_a,len_b;
int ai[101],bi[101];
int temp[202];
void reverse (char s[],int si[])
{
    int len=strlen(s);
    for(int i=0;i<len;i++)
        si[len-1-i]=s[i]-'0';
}
int main()
{
    int i,j;
    while(scanf("%s%s",a,b)!=EOF)
    {
        len_a=strlen(a);
        len_b=strlen(b);
        reverse(a,ai);
        reverse(b,bi);
        memset(temp,0,sizeof(temp));
        for(int i=0;i<len_a;i++)//这个循环解决了主要算法,最重要的代码
        {
            int start=i;
            for(int j=0;j<len_b;j++)
                temp[start++]+=ai[i]*bi[j];
        }
        for(i=0;i<202;i++)
        {
            if(temp[i]>9)
            {
                temp[i+1]+=temp[i]/10;
                temp[i]=temp[i]%10;
            }
        }
        for(i=201;i>=0;i--)
        {
            if(temp[i])break;
        }
        for(int j=i;j>=0;j--)
        printf("%d",temp[j]);
        cout<<endl;
    }
    return 0;
}

你可能感兴趣的:(高精度)