- #include "iostream"
- #include "string"
- using namespace std;
- int main(void)
- {
- char str1[1000],str2[1000];
- int i,j,len1,len2,len;
- bool flag=false;
- cout<<"任意两个大数的乘法(用数组来模拟小学三年级的乘法竖式计算过程):"<<endl;
- cout<<"请输入被乘数:";
- gets(str1);
- cout<<"请输入乘数:";
- gets(str2);
- len1=strlen(str1);
- len2=strlen(str2);
- int *a=new int[len1];
- int *b=int[len2];
- len=len1*len2+1;
- int *result= int[len];
- for(i=0;i<len;i++)
- result[i]=0;
- for(i=0;i<len1;i++) //将字符串转换为整数,并倒置过来
- a[i]=str1[len1-1-i]-'0';
- for(i=0;i<len2;i++)
- b[i]=str2[len2-1-i]-'0';
- for(i=0;i<len1;i++) //用数组来模拟小学三年级的乘法竖式计算过程
- {
- for(j=0;j<len2;j++)
- result[i+j]+=a[i]*b[j];
- }
- for(i=0;i<len;i++) //处理进位的情况
- {
- if(result[i]>9)
- {
- result[i+1]+=result[i]/10;
- result[i]%=10;
- }
- cout<<"两个大整数相乘的结果为:";
- for(i=len-1;i>=0;i--)
- if(flag)
- cout<<result[i];
- else if(result[i]!=0)
- {
- cout<<result[i];
- flag=true;
- }
- }
- cout<<endl;
- delete []a;
- delete []b;
- delete []result;
- system("pause");
- return 0;
- }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。