原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1049
代码:
#include <cstdio>
#include <cstring>
#include <malloc.h>
#include <iostream>
using namespace std;
void intToArray(int num, char* a)
{
int i = 0, len;
int t;
while (num)
{
a[i++] = num % 10 + '0';
num /= 10;
}
len = i;
for (i = 0; i < len / 2; i++)
{
t = a[i];
a[i] = a[len - i - 1];
a[len - i - 1] = t;
}
a[len] = 0;
}
void multiply(char* a, char* b, char* c)
{
int i, j, ca, cb, * s;
ca = strlen(a);
cb = strlen(b);
s = (int*)malloc(sizeof(int)*(ca+cb));
for (i = 0; i < ca + cb; i++)
s[i] = 0;
for (i = 0; i < ca; i++)
for (j = 0; j < cb; j++) s[i+j+1] += (a[i]-'0')*(b[j]-'0');
for (i = ca+cb-1; i >= 0; i--)
if (s[i] >= 10)
{
s[i-1] += s[i] / 10;
s[i] %= 10;
}
i = 0;
while (s[i]==0)
i++;
for (j = 0; i < ca + cb; i++, j++)
c[j] = s[i] + '0';
c[j] = '\0';
free(s);
}
int main()
{
int n, i;
char ans[40000],b[10];
while(~scanf("%d",&n))
{
ans[0] = '1'; ans[1] = 0;
for (i = 1; i <= n; i++)
{
intToArray(i,b);
multiply(ans,b,ans);
}
cout << ans << endl;
}
return 0;
}
其中multiply函数是个很有用的高精度乘法.