//主要思路是两个数组放两个大数,一个数组放各个位相乘的中间结果,一个数组放最后结果
#include <iostream>
using namespace std;
void Multiply()
{
char num1[50],num2[50];
char tmp1,tmp2;
int resultTmp[100],result[100];
memset(resultTmp,0,100*sizeof(int));
memset(result,0,100*sizeof(int));
int i,j,length1=0,length2=0;
//输入两个数,都要以#结尾,数的高位放在数组的低位
for(i=0;tmp1!='#';i++)
{
if(tmp1<'0'||tmp1>'9')
{
cout<<"error1!"<<endl;
return ;
}
num1[i]=tmp1;
length1++;
cin>>tmp1;
}
cin>>tmp2;
for(i=0;tmp2!='#';i++)
{
if(tmp2<'0'||tmp2>'9')
{
cout<<"error2!"<<endl;
return ;
}
num2[i]=tmp2;
length2++;
cin>>tmp2;
}
//两个数诸位相乘
{
for(j=0;j<length2;j++)
{
//因为是数的高位放在数组的低位,所以要从数组的高位开始
//乘积低位对齐的两个数放在同一个数组的元素中
}
}
//从中间结果数组得到结果
{
int oneBit=resultTmp[i];
//resultTmp[i]的第一位对应到result[i]
//第二位对应到result[i+1]……
j=i;
//逐位对应过去,求和
{
result[j]+=(oneBit%10);
//求和过程中需要进位
{
//进位
result[j]=result[j]%10;
}
j++;
oneBit=oneBit/10;
}
//最高的一位加到result
if(result[j]>=10)
{
result[j+1]+=result[j]/10;
result[j]=result[j]%10;
}
}
//得到最高位
for(i=99;i>=0&&result[i]==0;i--);
//逐位输出
{
cout<<result[j];
}
cout<<endl;
return ;
}
int main()
{
Multiply();
return 1;
}