首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

最小的计算大数阶乘的c程序,该怎么处理

2012-05-09 
最小的计算大数阶乘的c程序我刚写了一个计算大数阶乘的c语言小程序,可计算20000以内任意一个整数的阶乘,只

最小的计算大数阶乘的c程序
我刚写了一个计算大数阶乘的c语言小程序,可计算20000以内任意一个整数的阶乘,只有123个字节,见下。不知有人能否打破这一纪录。

C/C++ code
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);}


编译和运行方法:
下面在windows+VC2008 和linux中编译这个程序的例子,定义N的值为99,源文件是fac_v9.c,

a) .在Windows + VC2008 环境下编译

1.进入VS2008命令行窗口,我这里通过开始菜单“Microsoft Visual C++ 2008 Express Edition -》Visual Studio Tools -》Visual Studio 2008 Command Prompt” 进入

2.输入命令:cl /c /D "N=99" fac_v9.c

3.输入命令: link /subsystem:console fac_v9.obj /out:fac.exe
4.输入命令fac.exe,便可输出99的阶乘

b) 在Linux下编译。

1. 在终端窗口输入 gcc -DN=99 fac_v9.c -o fac

2. 输入命令./fac,可以输出99的阶乘



[解决办法]
C/C++ code
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根本无视空白字符不是,
[解决办法]
以前看到的
C/C++ code
#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语言没多久的爱好者我表示前路漫漫啊,现在只能编出阶乘运算,还做不到让程序更短……
[解决办法]
让程序更加短和看起来更加方便是写程序的宗旨,还有让代码的执行效率提高.
[解决办法]
大牛就是大牛,像我们不知道什么时候才能达到这个境界。
[解决办法]
探讨

非常理解楼上。不过,这段代码本来就不是为了方便阅读和理解而写的。写了19年的c程序了,我自然知道什么样的代码风格是好的,是便于阅读的。这段代码就是为了玩的,其目的是竭尽所能缩小程序的字符数,其结果肯定是难以阅读,难以理解。纵然你重新进行了排版,但是对大多数人来说,他依然是难以阅读,难于理解的。

[解决办法]
大数乘法,用数组,我也写过,就是纠结那个空间分配
[解决办法]
记录肯定暂时打不破了^^
[解决办法]
main for int putch
这三个应该也可以用宏代替吧?
可以少 十来个字符吧..

[解决办法]
C/C++ code
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
[解决办法]
发一帖,看你们还讨论这么为。
[解决办法]
楼主的程序能否解释一下呢
[解决办法]
内容简单,程序需要的就是通俗易懂。简洁。不过这个太简洁了。
[解决办法]
羡慕,刚学的菜鸟,表示亚历山大!

热点排行