最小的计算大数阶乘的c程序
我刚写了一个计算大数阶乘的c语言小程序,可计算20000以内任意一个整数的阶乘,只有123个字节,见下。不知有人能否打破这一纪录。
int a[N*5]={1},n=N,i,c,m=1;main(){for(;n;n--){for(c=i=0;i<m||c;)a[i++]=(c+=a[i]*n)%10,c/=10;m=i;}for(;m;)putch(a[--m]+48);}int a[N * 5] = { 1 }, n = N, i, c, m = 1;main (){ for (; n; n--) { for (c = i = 0; i < m || c;) a[i++] = (c += a[i] * n) % 10, c /= 10; m = i; } for (; m;) putch (a[--m] + 48);}
[解决办法]
我个人还是觉得,就算你要减少字符数,也没必要写到一行中,因为C根本无视空白字符不是,
[解决办法]
以前看到的
#include<stdio.h>#define BITS 500/*不小于结果的位数*/long R,a,y,_[(BITS+11)/6]={!!BITS,!!BITS},_1=!!BITS;int main(int __){return~-__?y?__>a?printf("%06ld",__[_-a]),main(~-__):0:(_1<=*_||__++<a&&(_1=!(R=0))?R+=_1[_]*__,_1[_]=R%1000000l,R/=1000000l,_1++==*_&&R&&++*_:(__=*_+a,y+=printf("%ld",_[__---a])),main(__)):(printf("a = "),scanf("%ld",&a),a<0?printf("error"):(a<(printf("a! =\n"),2)?printf("1"):main(!!_<<1)));}
[解决办法]
C语言 超过10年的大神果然名不虚传啊!!羡慕嫉妒恨 啊....
[解决办法]
作为接触C语言没多久的爱好者我表示前路漫漫啊,现在只能编出阶乘运算,还做不到让程序更短……
[解决办法]
让程序更加短和看起来更加方便是写程序的宗旨,还有让代码的执行效率提高.
[解决办法]
大牛就是大牛,像我们不知道什么时候才能达到这个境界。
[解决办法]
int a[N*5]={1},n=N,i,c,m=1;main(){n?i<m||c?(a[i++]=(c+=a[i]*n)%10,c/=10):(m=i,n--,i=c):putchar(a[--m]+48);m && main();} int a[N*5]={1},n=N,i,c,m=1;main(){for(;n;n--){for(c=i=0;i<m||c;)a[i++]=(c+=a[i]*n)%10,c/=10;m=i;}for(;m;)putch(a[--m]+48);}
[解决办法]
全局变量类型声明中int是可以省略的。
但是函数putch在Linux下是不支持的
[解决办法]
如果改成可在运行期间输入n的值,并可计算到2万的阶乘,在需将程序改为如下形式,去除空格和换行符,有139个字节。
C/C++ codeint a[100000]={1},n,i,c,m=1;
main()
{
scanf("%d",&n);
for(;n;n--)
{
for(c=i=0;i<m||c;)
a[i++]=(c+=a[i]*n)%10,c/=10;m=i;
}
for(;m;)
putch(a[--m]+48);
[解决办法]
楼主不错啊
[解决办法]
厉害,很好很强大
[解决办法]
19年啊,刚好等于我现在的年龄
[解决办法]
关于阶乘的有难度一道题目
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2277
[解决办法]
发一帖,看你们还讨论这么为。
[解决办法]
楼主的程序能否解释一下呢
[解决办法]
内容简单,程序需要的就是通俗易懂。简洁。不过这个太简洁了。
[解决办法]
羡慕,刚学的菜鸟,表示亚历山大!