#include <iostream>
using namespace std;
#include<string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void multi(string s1,string s2){
int l1=s1.length(),l2=s2.length();
int x[l1*l2];
int a[l1],b[l2];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(x,0,sizeof(x));
int i,j,k=0;
//在计算的时候,需要数组的低位保存数的低位
for(i=l1-1;i>=0;i--){
a[k++]=s1[i]-'0';
}
k=0;
for(i=l2-1;i>=0;i--){
b[k++]=s2[i]-'0';
}
for(i=0;i<l1;i++){
for(j=0;j<l2;j++){
//将第一个数的i位和第二个数的j位乘积的结果 累加到 x的 i+j位上**
x[i+j]+=a[i]*b[j];
}
}
//判断进位
for(i=0;i<l1*l2;i++){
if(x[i]>=10){
x[i+1]+=x[i]/10;
x[i]%=10;
}
}
//输出
//因为数组是按照最大情况开的,有可能存在没有用完的情况,排除开始的0,然后输出结果
for(k=l1*l2-1;k>=0;k--){
if(x[k]!=0){
break;
}
}
for(i=k;i>=0;i--){
cout<<x[i];
}
cout<<endl;
}
int main(int argc, char *argv[]) {
multi("999","99");
return 0;
}
C++大整数相乘
最新推荐文章于 2024-08-29 20:40:47 发布