69,382
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
#define MAX 10000
int result[MAX]={0};
char a[MAX/2];
char b[MAX/2];
template<typename Type>
void Display(Type s[])
{
cout<<s<<endl;
}
//将字符数组逆序
void Reverse(char s[],int length)
{
char mid[MAX];
for(int i=0;i<length;i++)
{
mid[length-i-1]=s[i];
}
mid[length]='\0';
strcpy(s,mid);
}
//将result数组调整,因为相乘时没有进位,比如result[i]=35
void Schule(int length)
{
int i=0;
for(i=0;i<length;i++)
{
if(result[i]>=10)
{
int temp;
temp=result[i];
result[i]=temp%10;
result[i+1]+=temp/10;
}
}
}
/*相乘,基本思想是:将两个大数存储在字符数组中,
乘数的一位分别乘于被乘数的每一位,将结果保存到result数组中
同时注意对应位的加和进位
*/
int Multi(char s1[],char s2[],int lens1,int lens2)
{
int i,j;
//char mid[MAX];
for(i=0;i<=lens1-1;i++)
{
int temp01,temp02,temp03;
temp01=s1[i]-'0';
for(j=0;j<=lens2-1;j++)
{
temp02=s2[j]-'0';
temp03=temp01*temp02;
result[i+j]+=temp03%10;
result[i+j+1]+=temp03/10;
}
}
return 0;
}
void main()
{
while(true)
{
int lens1,lens2,i;
cin>>a;
lens1=strlen(a);
cin>>b;
lens2=strlen(b);
a[lens1]='\0';
b[lens2]='\0';
Display(a);
cout<<endl;
Display(b);
cout<<endl;
Reverse(a,lens1);
Display(a);
Reverse(b,lens2);
Display(b);
Multi(a,b,lens1,lens2);
Schule(lens1+lens2+1);
if(result[lens1+lens2-1]!=0)cout<<result[lens1+lens2-1];
for(i=lens1+lens2-2;i>=0;i--)
{
cout<<result[i];
}
cout<<endl;
for(i=0;i<=lens1+lens2+1;i++)
result[i]=0;
}
}