微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数乘法

  1. #include "iostream"  
  2. #include "string"  
  3. using namespace std;  
  4. int main(void)  
  5. {  
  6.     char str1[1000],str2[1000];  
  7.     int i,j,len1,len2,len;  
  8. bool flag=false;  
  9.     cout<<"任意两个大数的乘法(用数组来模拟小学三年级的乘法竖式计算过程):"<<endl;  
  10.     cout<<"请输入被乘数:";  
  11.     gets(str1);  
  12.     cout<<"请输入乘数:";  
  13.     gets(str2);  
  14.     len1=strlen(str1);  
  15.     len2=strlen(str2);  
  16. int *a=new int[len1];  
  17. int *b=int[len2];  
  18.     len=len1*len2+1;  
  19. int *result= int[len];  
  20.     for(i=0;i<len;i++)  
  21.         result[i]=0;  
  22. for(i=0;i<len1;i++) //将字符串转换为整数,并倒置过来  
  23.         a[i]=str1[len1-1-i]-'0';  
  24. for(i=0;i<len2;i++)  
  25.         b[i]=str2[len2-1-i]-'0';  
  26. for(i=0;i<len1;i++)  //用数组来模拟小学三年级的乘法竖式计算过程  
  27.     {  
  28.         for(j=0;j<len2;j++)  
  29.             result[i+j]+=a[i]*b[j];  
  30.     }  
  31.     for(i=0;i<len;i++)   //处理进位的情况  
  32.     {  
  33.         if(result[i]>9)  
  34.         {  
  35.             result[i+1]+=result[i]/10;  
  36.             result[i]%=10;  
  37.         }  
  38.     cout<<"两个大整数相乘的结果为:";  
  39. for(i=len-1;i>=0;i--)  
  40. if(flag)  
  41.             cout<<result[i];  
  42. else if(result[i]!=0)  
  43.         {  
  44.             cout<<result[i];  
  45.             flag=true;  
  46.         }  
  47.     }  
  48.     cout<<endl;  
  49. delete []a;  
  50. delete []b;  
  51. delete []result;  
  52.     system("pause");  
  53. return 0;  
  54. }  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐