
C语言,如何提高结果的输出位数,现最高为10位 5
我想把这个程序的输出位数提高,当前的输出位数是10位。请指教!#include<stdio.h>voidmain(){unsignedlonga=1;intb=2,t;p...
我想把这个程序的输出位数提高,当前的输出位数是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();
} 展开
#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();
} 展开
3个回答
展开全部
你这个程序的作用是求一个数字的阶乘,但是能够计算的数字很有限,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
................
/*下面这个代码把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
................
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();
}
#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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在VC和VS中,unsigned long和unsigned int都是8个字节长度,可表示的范围是0 -- 4294967295,长度是10位,这与表示范围有关,与显示方法无关。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询