输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。

Posted Just Steps

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。相关的知识,希望对你有一定的参考价值。

 1 #include<iostream>
 2 #include<cassert>
 3 void multiply(const char *a,const char *b)
 4 {
 5     assert(a!=NULL && b!=NULL);
 6     int i,j,ca,cb,*s;
 7     ca=strlen(a);
 8     cb=strlen(b);
 9     s=(int *)malloc(sizeof(int)*(ca+cb));  //分配存储空间
10     for(i=0;i<ca+cb;i++)
11         s[i]=0;                     //每个元素赋初值为0
12 
13     
14     for(i=0;i<ca;i++)
15         for(j=0;j<cb;j++)
16             s[i+j+1]+=(a[i]-0)*(b[j]-0);  //两个嵌套的for循环,将字符串中的数字通过-‘0’ 
17     for(i=ca+cb-1;i>=0;i--)                   //转换为十进制数字
18         if(s[i]>=10)
19         {
20             s[i-1]+=s[i]/10;                   
21             s[i]%=10;
22         }
23 
24 char *c=(char *)malloc((ca+cb)*sizeof(char)); 25 i=0; 26 while(s[i]==0) 27 i++; 28 for(j=0;i<ca+cb;i++,j++) //将十进制数字转换为字符,存储到字符数组中 29 c[j]=s[i]+0; 30 c[j]=\0; 31 for(i=0;i<ca+cb;i++) 32 std::cout<<c[i]; 33 std::cout<<std::endl; 34 free(s); 35 free(c); 36 } 37 38 int main() 39 { 40 const char *strnum1="123"; 41 const char *strnum2="456"; 42 multiply(strnum1,strnum2); 43 return 0; 44 }

 

以上是关于输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。的主要内容,如果未能解决你的问题,请参考以下文章

大整数相乘

ZZNUOJ_用C语言编写程序实现1375:画箭(附完整源码)

牛客刷题-大整数相乘

[Nowcoder] 大整数相乘(拼多多笔试题)

大整数相乘

求一c语言程序,输入两个数,判断他们是不是相等