高精度乘法
Description
在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。
现在输入两个整数,请输出它们的乘积。
Input
两行,每行一个正整数,每个整数不超过10000位
Output
一行,两个整数的乘积。
Sample Input 1
99 101
Sample Output 1
9999
代码:
#include <iostream>
 #include <cmath>
 using namespace std;
 int main()
 {
  string a;
  string b;
  int flag=2;
  int max;
  int len;
  int u;
  int c[20002]={0};
  int  e[10001];
  int  d[10001];
     cin>>a;
  cin>>b;
 for(int i=0,l=a.length()-1;i<a.length();)
  e[l--]=a[i++]-'0';
  for(int j=0,m=b.length() -1;j<b.length();)
  d[m--]=b[j++]-'0';
  if(a.length()>b.length())//a的长度长一些 
  {
   len=b.length();
   flag=1;
   max=a.length(); 
  }
  else//b 的长度长一些 
  {
  len=a.length();
  flag=0;
  max=b.length();
  }
  
  if(flag==0)
  {
   for(int i=0;i<len;i++)//短的控制外层循环,每一个和内层循环的相乘 
   {
       int k=i;
     for(int j=0;j<max;j++)
    {
     int s=c[k]+e[i]*d[j];
     c[k]=s%10;
     c[k+1]=s/10+c[k+1];
     k++;
     } 
    } 
  }
   else 
   {
    for(int i=0;i<len;i++)//短的控制外层循环,每一个和内层循环的相乘 
   {
       int k=i;
    for(int j=0;j<max;j++)
    {
     int s=c[k]+d[i]*e[j];
     c[k]=s%10;
     c[k+1]=s/10+c[k+1];
     k++;
     } 
    } 
   }
   
   for(int x=20000;x>=0;x--)
     {
   if(c[x]!=0)
   {
   u=x;
   break; 
   }
   
     }
  for(int o=u;o>=0;o--)
  {
   cout<<c[o];
     
      }
  return 0;
 }
学习心得:利用循环,控制外层循环,每一个和内层循环的相乘。









