c语言求n的阶乘 注意n可能很大(n范围不定 不确定数值· ) 阶乘可能会超过整数范围
答案:4 悬赏:50 手机版
解决时间 2021-03-19 21:18
- 提问者网友:不要迷恋哥
- 2021-03-19 07:20
c语言求n的阶乘 注意n可能很大(n范围不定 不确定数值· ) 阶乘可能会超过整数范围
最佳答案
- 五星知识达人网友:千杯敬自由
- 2021-03-19 08:33
那就只能有数组存储了?
#include
#include
#include
#include
int data[100000];
void main()
{
int m=6,n,i,j,len,t,temp;
t = (int)pow(10.0,m*1.0);
printf("请输入n:");
scanf("%d",&n);
len = 1;
memset(data,0,100000);
data[1]=1;
for(i=1;i<=n;i++)
{
temp = 0;
for(j=1;j<=len && i<=n;)
{
data[j]*=i;
data[j]+=temp;
if(data[j]>t)
{
temp = data[j]/t;
data[j]%=t;
j++;
}
else
{
temp =0;
i++;
}
}
if(temp) {len++;data[len]=temp;}
}
for(i=len;i>=1;i--)
printf("%d",data[i]);
printf("
");
}
#include
#include
#include
#include
int data[100000];
void main()
{
int m=6,n,i,j,len,t,temp;
t = (int)pow(10.0,m*1.0);
printf("请输入n:");
scanf("%d",&n);
len = 1;
memset(data,0,100000);
data[1]=1;
for(i=1;i<=n;i++)
{
temp = 0;
for(j=1;j<=len && i<=n;)
{
data[j]*=i;
data[j]+=temp;
if(data[j]>t)
{
temp = data[j]/t;
data[j]%=t;
j++;
}
else
{
temp =0;
i++;
}
}
if(temp) {len++;data[len]=temp;}
}
for(i=len;i>=1;i--)
printf("%d",data[i]);
printf("
");
}
全部回答
- 1楼网友:鸠书
- 2021-03-19 10:19
/*定义一个数组来存,自己定义相应的乘法运算*、
#includemain()
{
int n,int result[1000]={0};
int i=0,j=0;
int temp_10=0,temp_100=0,temp_1000=0;/*分别存储10、100、1000的进位,最大可计算用单精度或着双精度啊,这样范围就能扩大了
- 2楼网友:野慌
- 2021-03-19 09:38
对32位系统,unsigned int 的数据占用4个字节,最大绝对值是42949672995,而13! = 6227020800就超出了范围。
- 3楼网友:英雄的欲望
- 2021-03-19 08:49
//#include "stdafx.h"//VC++6.0要用这一行
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
char *FactorialLN(int n){
int i,j,k,tmp,len;
char *pa,*pb,*px,s[11]="",*ps9=s+9;
double dec=0;
for(n++,i=2;i len=(int)dec+2;
if(!(pa=(char *)malloc(len)) || !(pb=(char *)malloc(len))){
printf("Application memory failure...");
exit(0);
}
for(i=0;i for(i-=2,j=--n;j;*(pb+i--)=j%10,j/=10);
len--;
i++;
while((k=--n)>1){
for(px=ps9;k;*px--=k%10,k/=10);
for(k=0,tmp=ps9-px;k for(px=ps9,j=len-1;j>=i;*(pa+j-k)+=*(pb+j--) * *(px-k));
for(px=pa-k,j=len-1-k;j>=i-k;j--){
if(*(px+j)>9){
*(px+j-1) += *(px+j)/10;
*(px+j) %= 10;
}
}
if(i) i--;
}
px=pa;
pa=pb;
pb=px;
for(k=0;k }
free(pa);
for(i=0;i return pb;
}
void main(void){
int n;
char *p;
printf("Please enter an integer.\nn=");
scanf("%d",&n);
printf("\n%d! = %s.",n,p=FactorialLN(n));
free(p);
printf("\n");
}
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
char *FactorialLN(int n){
int i,j,k,tmp,len;
char *pa,*pb,*px,s[11]="",*ps9=s+9;
double dec=0;
for(n++,i=2;i
if(!(pa=(char *)malloc(len)) || !(pb=(char *)malloc(len))){
printf("Application memory failure...");
exit(0);
}
for(i=0;i
len--;
i++;
while((k=--n)>1){
for(px=ps9;k;*px--=k%10,k/=10);
for(k=0,tmp=ps9-px;k
for(px=pa-k,j=len-1-k;j>=i-k;j--){
if(*(px+j)>9){
*(px+j-1) += *(px+j)/10;
*(px+j) %= 10;
}
}
if(i) i--;
}
px=pa;
pa=pb;
pb=px;
for(k=0;k
free(pa);
for(i=0;i
}
void main(void){
int n;
char *p;
printf("Please enter an integer.\nn=");
scanf("%d",&n);
printf("\n%d! = %s.",n,p=FactorialLN(n));
free(p);
printf("\n");
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯