高精度乘法(正负数皆可(Bull Math)POJ)

描述

高精度乘法
输入:两行,每行表示一个非负整数(不超过10000位)
输出:两数的乘积。

样例1

样例输入1

99
101

样例输出1

9999
  1. #include<iostream>
  2. #include<cstring>
  3. #define T 1000000
  4. using namespace std;
  5. char a1[T],b1[T];
  6. int a[T],b[T],c[T],lena,lenb,lenc,x,t,f;
  7. int main()
  8. {
  9.     while(cin>>a1>>b1)
  10.     {
  11.         memset(a,0,sizeof(a));
  12.         memset(b,0,sizeof(b));
  13.         memset(c,0,sizeof(c));
  14.         lena=strlen(a1);
  15.         lenb=strlen(b1);
  16.         f=1;t=0;
  17.         if(a1[0]=='-')//判断第一个字符是不是负数,如果是,再判断另一个是不是,再想输出问题对于B1字符数组同理
  18.         {
  19.             f*=-1;t++;
  20.         }
  21.         for(int i=t;i<=lena-1;i++)
  22.             a[lena-i]=a1[i]-48;//除去符号位后,将字符变成数字,放在对应的int数组里面,进行计算
  23.         t=0;
  24.         if(b1[0]=='-')
  25.         {
  26.             f*=-1;t++;
  27.         }
  28.         for(int i=t;i<=lenb-1;i++)
  29.             b[lenb-i]=b1[i]-48;
  30.             for(int i=1;i<=lena;i++)
  31.             {
  32.                 x=0;
  33.                 for(int j=1;j<=lenb;j++)
  34.                 {
  35.                     c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
  36.                     x=c[i+j-1]/10;
  37.                     c[i+j-1]%=10;
  38.                 }
  39.                 c[i+lenb]=x;
  40.             }
  41.             lenc=lena+lenb;
  42.             while(c[lenc]==0&&lenc>1)
  43.             lenc--;
  44.             if(f==-1)
  45.             cout<<"-";
  46.             for(int i=lenc;i>=1;i--)
  47.             cout<<c[i];
  48.             cout<<endl;
  49.     }
  50.     return 0;
  51. }

与POJ的Bull Math,一样 

猜你喜欢

转载自blog.csdn.net/xiaoa_axiao/article/details/81052826