大数相乘

来源:互联网 发布:安卓福利软件 编辑:程序博客网 时间:2024/05/20 23:03

比较大的两个数相乘,采用字符运算,按位相乘,控制好进位就可以了。

相关示例参考:可怕的阶乘 

//大数相乘#include<iostream>using namespace std;#define max 100void CalcNN(char *A,char *B,char *C){if(NULL==A||NULL==B){return;}int len_a=strlen(A);int len_b=strlen(B);int len_c=0;if((len_a==1&&A[0]=='0')||(len_b==1&&B[0]=='0')){C[0]='0';C[1]='\0';return;}int bit[max]={0};for(int i=len_a-1;i>=0;i--){for(int j=len_b-1;j>=0;j--){bit[(len_a+len_b-2)-(j+i)]+=((A[i]-'0')*(B[j]-'0'));//按位相乘}}for(int i=0;i<max;i++){if(bit[i]>9){for(int k=i;k<max&&bit[k]>9;k++)//计算进位{bit[k+1]+=(bit[k]/10);bit[k]=(bit[k]%10);}}}int len=max-1;while(bit[len]==0){len--;}for(int i=len;i>=0;i--){C[len_c++]=bit[i]+'0';}C[len_c]='\0';}int main(){char A[max]={0};char B[max]={0};char C[max]={0};while(1){cout<<"乘数:";gets(A);cout<<"乘数:";    gets(B);    CalcNN(A,B,C);cout<<"积  :";    puts(C);}system("pause");return 0;}
运行结果:



0 0
原创粉丝点击