永发信息网

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("
");
     


全部回答
  • 1楼网友:鸠书
  • 2021-03-19 10:19

/*定义一个数组来存,自己定义相应的乘法运算*、

#include
main()
{
    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");
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯