2009年2月23日 星期一

Q10106: Product

/*
大數的乘法
必須利用int arr[n]去一個一個乘
這跟階層到很高的階層數的題目類似

Run time: 0.000
*/
#include <stdio.h>
#include <string.h>
#define N 251
char prod1[N];
char prod2[N];
int arr1[N];
int arr2[N];
int ans[2*N];
void to_INT(int len1, int len2);
void prod(int len1, int len2);

int main()
{
int len1, len2;
while (gets(prod1) != NULL)
{
gets(prod2);

len1 = strlen(prod1);
len2 = strlen(prod2);

to_INT(len1, len2);

prod(len1, len2);

}

return 0;
}

void to_INT(int len1, int len2)
{
int i, j;

for ( i = len1-1, j = 0; i >= 0; i--, j++)
arr1[j] = prod1[i]-'0';

for ( i = len2-1, j = 0; i >= 0; i--, j++)
arr2[j] = prod2[i]-'0';
}

void prod(int len1, int len2)
{
int i, j, k;

for ( i = 0; i < 2*N; i++)
ans[i] = 0;

for ( i = 0; i < len1; i++)
{
for ( j = 0, k = i; j < len2; j++)
ans[k++] += arr1[i]*arr2[j];

for ( j = 0; j < k-1; j++)
{
if (ans[j] >= 10)
{
ans[j+1] += ans[j]/10;
ans[j] %= 10;
}
}
}

for ( i = k-1; i >= 0; i--)
if (ans[i]) break;

if (i == -1) printf("0\n");

else
{
for ( ; i >= 0; i--)
printf("%d", ans[i]);
printf("\n");
}

}

沒有留言: