C语言,如何提高结果的输出位数,现最高为10位

我想把这个程序的输出位数提高,当前的输出位数是10位。请指教!
#include <stdio.h>
void main()
{
unsigned long a=1;
int b=2,t;
printf("\ninput number: ");
scanf("\n%d",&t);
while(b<=t)
{
a*=b;
printf("\n%djiecheng :%lu\n",t,a);
b++;

}
getch();
}

你这个程序的作用是求一个数字的阶乘,但是能够计算的数字很有限,13!=6227020800就已经超过了long所能够表示的范围,所以不能用整形数来表示,只能用字符串或者数组来表示。下面就介绍一个用数组表示大数阶乘的问题的程序。
/*下面这个代码把40以内的数字的阶乘都打印出来,也可修改程序打印固定数字的阶乘,也可以打印更多数字的阶乘,最大可打印10000以内数字的阶乘。参考方法*/
#include <stdio.h>
#define N 10000
int main()
{
static long int r[N]={1}; /*数组r里面每个元素存放阶乘的4位数*/
int i,j;
int k=0,l=0; /*k表示低位与下一个数字相乘的进位,l表示r中多少个元素参与了乘法*/
for(i=1;i<=40;i++) /*这个循环是用来打印40以内的阶乘*/
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k; /*输入r每一个元素都与i相乘,然后加上低位相乘的进位,参考乘法法则*/
k=r[j]/10000; /*每个r元素之保存4位数字,得到进位k*/
r[j]=r[j]%10000; /*除以10000的余数就是乘后这个元素的四位数*/
}
if(k) /*假如最高位相乘后还有进位,r中相乘的元素就多一个,多的一个元素就是进位k*/
{
l++;
r[j]=k;
k=0;
}
j=l;
/*打印i的阶乘*/
printf("%d!=%d",i,r[j--]);
for(;j>=0;j--)
{
printf("%04d",r[j]);
}
printf("\n");
}
return 0;
}

部分结果如下:
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
21!=51090942171709440000
22!=1124000727777607680000
................
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-30
用double可以到20位。
#include <stdio.h>
void main()
{
double a=1;
int b=2,t;
printf("\ninput number: ");
scanf("\n%d",&t);
while(b<=t)
{
a*=b;
printf("\n%djiecheng :%.0lf\n",b,a);
b++;
}
getchar();
}
第2个回答  2013-07-30
在VC和VS中,unsigned long和unsigned int都是8个字节长度,可表示的范围是0 -- 4294967295,长度是10位,这与表示范围有关,与显示方法无关。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网