大数乘法的简单实现

来源:互联网 发布:阳春政府网络问政 编辑:程序博客网 时间:2024/05/17 09:21

输入两个数(大数),计算成绩结果。

#include <iostream>#include <string>using namespace std;const int MaxSize=3000;//模拟手算,大数.   2014-1-20 int data[MaxSize+5];int *aArray,*bArray;int aSize,bSize;void gsh(int i){//从i到j个位置格式化int k;for(k=i;k<=aSize+bSize+1;k++){if(data[k]>9){data[k+1]+=data[k]/10;data[k]%=10;}}}void fun(){int relust,i,j;for(i=1;i<=bSize;i++){for(j=1;j<=aSize;j++){relust=bArray[i]*aArray[j];data[i+j-1]+=relust;gsh(i);//从i进位,全部是否进位格式化}}relust=0;for(i=bSize+aSize+1;i>=1;i--)if(data[i])break;for(;i>=1;i--)cout<<data[i];cout<<endl;}int main(){int i,j;string a,b;cin>>a>>b;//输入的数字保存在string中aArray=new int[a.length()+3];bArray=new int[b.length()+3];//将数字保存在int数组中memset(aArray,0,sizeof(aArray));memset(bArray,0,sizeof(bArray));for(i=a.length(),j=1;i>=0;i--)if(a[i]>='0'&&a[i]<='9')aArray[j++]=a[i]-'0';aSize=j-1;for(i=b.length(),j=1;i>=0;i--)if(b[i]>='0'&&b[i]<='9')bArray[j++]=b[i]-'0';bSize=j-1;for(i=0;i<=MaxSize;i++)data[i]=0;fun();//for(i=aSize;i>0;i--)//cout<<aArray[i]; //test//cout<<endl<<endl;//for(i=bSize;i>0;i--)//cout<<bArray[i];return 0;}


0 0
原创粉丝点击