C语言,如何提高结果的输出位数,现最高为10位
答案:3 悬赏:70 手机版
解决时间 2021-03-23 07:08
- 提问者网友:记得曾经
- 2021-03-22 07:16
C语言,如何提高结果的输出位数,现最高为10位
最佳答案
- 五星知识达人网友:深街酒徒
- 2021-03-22 08:33
你这个程序的作用是求一个数字的阶乘,但是能够计算的数字很有限,13!=6227020800就已经超过了long所能够表示的范围,所以不能用整形数来表示,只能用字符串或者数组来表示。下面就介绍一个用数组表示大数阶乘的问题的程序。
#include
#define N 10000
int main()
{
static long int r[N]={1};
int i,j;
int k=0,l=0;
for(i=1;i<=40;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k;
k=r[j]/10000;
r[j]=r[j]%10000;
}
if(k)
{
l++;
r[j]=k;
k=0;
}
j=l;
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
................
#include
#define N 10000
int main()
{
static long int r[N]={1};
int i,j;
int k=0,l=0;
for(i=1;i<=40;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k;
k=r[j]/10000;
r[j]=r[j]%10000;
}
if(k)
{
l++;
r[j]=k;
k=0;
}
j=l;
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楼网友:煞尾
- 2021-03-22 10:04
在VC和VS中,unsigned long和unsigned int都是8个字节长度,可表示的范围是0 -- 4294967295,长度是10位,这与表示范围有关,与显示方法无关。
- 2楼网友:持酒劝斜阳
- 2021-03-22 09:03
用double可以到20位。
#include
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
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();
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯