以前写的一个阶乘程序,
在时间可以承受情况下,
可以算到20000,
在tc下就把new改成malloc吧,
仅供参考!
#include<stdio.h>
int main(int argc, char *argv[])
{
long i, j, c, len, temp = 0;
int n = 1;
printf("input n [from 1 to 10000] please! \n");
while(scanf("%ld", &n) && n != 0)
{
long *a = new long[4 * n]; //动态分配空间
a[0] = 1, len = 1;
for(i = 1; i <= n; i++)
{
c = 0;
for(j = 0; j < len; j++)
{
temp = a[j] * i + c;
c = temp / 100000;
a[j] = temp % 100000;
}
while(c > 0) //处理进位
{
len = len + 1;
a[len - 1] = c;
c /= 100000;
a[len - 1] %= 100000;
}
}
printf("%ld", a[len - 1]);
for(i = len - 2; i >= 0; i--) //逆序输出
printf("%05ld", a[i]);
printf("\nif you want to quit ,please input 0! \n");
delete a; //释放空间
}
return 0;
}
在时间可以承受情况下,
可以算到20000,
在tc下就把new改成malloc吧,
仅供参考!
#include<stdio.h>
int main(int argc, char *argv[])
{
long i, j, c, len, temp = 0;
int n = 1;
printf("input n [from 1 to 10000] please! \n");
while(scanf("%ld", &n) && n != 0)
{
long *a = new long[4 * n]; //动态分配空间
a[0] = 1, len = 1;
for(i = 1; i <= n; i++)
{
c = 0;
for(j = 0; j < len; j++)
{
temp = a[j] * i + c;
c = temp / 100000;
a[j] = temp % 100000;
}
while(c > 0) //处理进位
{
len = len + 1;
a[len - 1] = c;
c /= 100000;
a[len - 1] %= 100000;
}
}
printf("%ld", a[len - 1]);
for(i = len - 2; i >= 0; i--) //逆序输出
printf("%05ld", a[i]);
printf("\nif you want to quit ,please input 0! \n");
delete a; //释放空间
}
return 0;
}