c++输出18!的结果如何实现?
- 提问者网友:愿为果
- 2021-07-20 09:47
- 五星知识达人网友:煞尾
- 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; }