大数运算之阶乘
副问题[/!--empirenews.page--]
Int不能存储较大数int 代表有标记整数,也就是说,用 int 声明的变量可所以正数,可所以负数,也可所以零,可是只能是整数。尺度划定 int 的最小取值范畴是 -32767 到 32767。 int 的取值范畴因呆板而异,可是必然要大于可能便是 -32767 到 32767。一样平常来说,int 占用一个字的内存空间。因此,字长为 16 位(Bit)的旧式 IBM 兼容机行使 16 位来储存整型 int ,取值范畴是-32768 到 32767 。今朝的小我私人电脑一样平常都是 32 位字长的,这些电脑中,int 一样平常也是 32 位的,取值范畴是 -2147483648 到 2147483647。对付行使 64 位 CPU 的电脑,行使更多位储存 int 也是很天然的工作,取值范畴虽然也会更大。 Int: 16位 -2^15? ~ 2^15-1 32位 -2^31? ~2^31-1 64位 -2^63? ~2^63-1 对付大数感受长度照旧不足,大数动辄都是几百位数,最近看到一段代码,本身研究了一段时刻,感受C说话真是强盛,再加上这次国庆去北京,相识到C说话着实从来都不像各人工钱的那样只是作为低级说话,入门说话供各人进修的,着实C说话的强盛远远超出你我的想象。好吧,闲扯了一下。 大数阶乘:1000!精简代码:#include<stdio.h> #define N 1000 long a[8916]={1,0},n,i,c,len; int main(void) { n=N; for ( len=1; n>1; n--) { for (c=0,i=0; i<len; i++ ){ a[i]= ( c+= a[i]*n )% 10000; c/=10000; } ((a[i]=c)>0)?len++:0; } for(len--,printf("%d",a[len--]); len>=0; len--)printf("%04d",a[len]); return 0; } ? 我的调试代码:#include<stdio.h> #define N 1000/* 最大到10555的阶乘 */ long a[8816] = {1,0 },len; int main( void ) { n = N; for ( len = 1; n > 1; n-- ) { printf( "第1层for:len:%d,n:%dn",len,n ); for ( c = 0,i = 0; i <len; i++ ) { printf( "第2层for参数:c:%d,i:%dn",i ); a[i] = (c += a[i] * n) % 10000; c /= 10000; printf( "第2层for:a[i]:%d,c:%dn",a[i],c ); } ( (a[i] = c) > 0) ? len++: 0; printf( "第2层for竣事:len:%dn",len ); printf( "n" ); } /* * for( len--,printf("for内:%dn",a[len--]); len>=0; len--) * { * // printf("打印:len:%d,a[len--]:%dn",a[len--]); * printf("%04dn",a[len]); * } */ for ( len--,printf( "%d",a[len--]); len >= 0; len-- ) printf( "%04d",a[len] ); /* %04d 4代表着一共有几位,前面加0代表着输出时不足的位数用0添补 */ return(0); } /* for (len=1;n>1; n--) //把len的长度初始为1,由于数组中已经有一个元素了a[0]=1 * { * for(c=0,i=0; i<len;i++ ) //c初始为0,一开始还没运算哪来的进位,这是个内层轮回,数组a中的len * //个元素都必需参加运算,都必需*n,这就是下面a[i]*n的理由 * * { * a[i]= ( c+= a[i]*n ) % 10; c/=10; //c是进位,不消说了,c+=a[i]*n,a每个元素与n * //相乘必需思量低位是否有进位,有就加起来 * } * * ((a[i]=c)>0)?len++:0; //最后一个元素也有进位吗,有的话就在当前的元素的下个数组位置直接便是进位值,并 * // 且数组的元素值要加1,没有的话什么都不干,光一个0什么都不是 * * } */ 精简版代码编译信息:Compiling singlefile... -------- - Filename:D:dev++99.cpp - Compiler Name: TDM-GCC 4.9.2 64-bit Release ? Processing C++source file... -------- - C++ Compiler:E:Dev-CppMinGW64bing++.exe - Command: g++.exe "D:dev++99.cpp" -o"D:dev++99.exe"?-I"E:Dev-CppMinGW64include"-I"E:Dev-CppMinGW64x86_64-w64-mingw32include"-I"E:Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2include"-I"E:Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2includec++"-L"E:Dev-CppMinGW64lib"-L"E:Dev-CppMinGW64x86_64-w64-mingw32lib" -static-libgcc ? Compilationresults... -------- - Errors: 0 - Warnings: 0 - OutputFilename: D:dev++99.exe - Output Size: 163.51953125 KiB - Compilation Time: 0.34s 运行功效:调试代码利便领略:本身切实运行一下,我就不贴啦。 本身下手会越发影象深刻一些。 版权声名著作权归作者全部?。? 颁发日期:2016年10月8日? 来历:CSDN? (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |