永发信息网

c++输出18!的结果如何实现?

答案:2  悬赏:70  手机版
解决时间 2021-07-20 20:19
  • 提问者网友:愿为果
  • 2021-07-20 09:47
RT,long double,_int64也只能保留10为有效数字,这该怎么办呢?
最佳答案
  • 五星知识达人网友:煞尾
  • 2021-07-20 10:32

用数组存储结果:


程序代码:


#include <stdio.h>
void main()
{
int n,a[200],carry,temp,i,j,digit = 1;
printf("Please input n:");
scanf("%d",&n);
a[0] = 1;

for( i = 2; i <= n; ++i)
{
for( j = 1, carry = 0; j <= digit; ++j)
{
temp = a[j-1] * i + carry;
a[j-1] = temp % 10;
carry = temp / 10;
}
while(carry)
{
a[++digit-1] = carry % 10;
carry /= 10;
}
}
printf("Result is:\n%d ! = ",n);
for( i = digit; i >=1; --i)
{
printf("%d",a[i-1]);
}
printf("\n");
}
执行结果:


全部回答
  • 1楼网友:独钓一江月
  • 2021-07-20 11:23

大一点的数可以考虑用数组来存。。。下面是用数组来存的代码。。可以输出大到几千几万的阶乘。。

#include<stdio.h> unsigned x[8000]={0},n,p,i,j,t; int main() { while(scanf("%d",&n)!=EOF) { x[p=7998]=1; for(i=1;i<=n;i++) { x[--p]=x[--p]=0; for(j=7998;j>p;j--) {x[j]*=i; t=j+1; x[j]+=x[t]/100000; x[t]%=100000; } while(!x[p]) p++; } for(printf("%u",x[p++]);p<7999;p++) printf("%05u",x[p]); printf("\n"); } return 0; }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯