高精度乘法

来源:互联网 发布:数据库迁移方案 编辑:程序博客网 时间:2024/04/28 16:17

 #include<iostream>

using namespace std;

const int MAX=100;

char s1[MAX];
char s2[MAX];               //字符串数组,接收数据

int a1[MAX];
int a2[MAX];                //转化数组,存储转化后的字符串数组
int a3[MAX];                //积数组

int main()
{
    for(int in=0; in < MAX; ++in)
    {
        a1[in]=0;
        a2[in]=0;
        a3[in]=0;          
    }                       //初始化
   
    cin >>s1>>s2;
    int size1;
    int size2;
    int size;
   
    size1=strlen(s1);
    size2=strlen(s2);
    size=size1+size2;           //确定积数组的大小,其大小为2个字符串长度之和
   
    for(int i=0;i < size1; ++i)         //将2字符串转化为整数数组,低位在前
        a1[i]=s1[size1-1-i]-'0';
       
    for(int j=0;j < size2; ++j)
        a2[j]=s2[size2-1-j]-'0';
       
       
    int flag=0;                     //进位标记
   
    for(int d=0;d < size2; ++d)         //两层循环处理,将a2的每个数与a1中的数相乘,然后将结果存入积数组,注意进位处理
    {
        for(int d1=0;d1 < size1; ++d1)
        {
            int temp=a2[d] * a1[d1];
            a3[d1+flag]+=temp%10;
           
            if(a3[d1+flag] >= 10)
            {
                a3[d1+flag]=a3[d1+flag]%10;
                a3[d1+flag+1]++;
            }
            a3[d1+flag+1]+=temp/10;
           
            if(a3[d1+flag+1] >= 10)
            {
                a3[d1+flag+1]=a3[d1+flag+1]%10;
                a3[d1+flag+2]++;
            }
        }
        ++flag;
    }
   
    int t=1;                       
    for(int op=0; op < size; ++op)
    {
        if(t && a3[size-1-op] == 0)         //首位为0不打印
           continue;
        else
           t=0;
          
           cout <<a3[size-1-op];
    }

   
    return 0;
       
   
}