#include <stdio.h>
#include <string.h>
#define MAX_LEN 200
unsigned an1[MAX_LEN+10];
unsigned an2[MAX_LEN+10];
unsigned aResult[MAX_LEN * 2 + 10];
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int main()
{
gets( szLine1); //gets 函数读取一行
gets( szLine2);
int i, j;
int nLen1 = strlen( szLine1);
memset( an1, 0, sizeof(an1));
memset( an2, 0, sizeof(an2));
memset( aResult, 0, sizeof(aResult));
j = 0;
for( i = nLen1 - 1;i >= 0 ; i --)
an1[j++] = szLine1[i] - '0';
int nLen2 = strlen(szLine2);
j = 0;
for( i = nLen2 - 1;i >= 0 ; i --)
an2[j++] = szLine2[i] - '0';
for( i = 0;i < nLen2; i ++ )
{ //每一轮都用 an1 的一位,去和 an2 各位相乘
//从 an1 的个位开始
for( j = 0; j < nLen1; j ++ )
//用选定的 an1 的那一位,去乘 an2 的各位
aResult[i+j] += an2[i]*an1[j]; //两数第 i, j 位相乘,累加到结果的第 i+j 位
}
//下面的循环统一处理进位问题
for( i = 0; i < MAX_LEN * 2; i ++ )
{
if( aResult[i] >= 10 )
{
aResult[i+1] += aResult[i] / 10;
aResult[i] %= 10;
}
}
//下面输出结果
bool bStartOutput = false;
for( i = MAX_LEN * 2; i >= 0; i -- )
if( bStartOutput)
printf("%d", aResult[i]);
else if( aResult[i] )
{
printf("%d", aResult[i]);
bStartOutput = true;
}
if(! bStartOutput )
printf("0");
return 0;
}
如你输入:
12345678900
98765432100
结果为:
1219326311126352690000