/*
大數的乘法
必須利用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");
}
}
2009年2月23日 星期一
Q10106: Product
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言