C++程序里 100的阶乘为什么不能显示出来! 10以内的阶乘可以显示!! 求解

如题所述

第1个回答  2013-10-22

100的阶乘已经超过了 int  和 long long(__int64) 的取值范围了,如果你想要做,需要用字符串模拟乘法运算模拟出答案

#include <iostream>
using namespace std;
int main()
{
    int a[10000];
    int i,j,temp,t,n;
    while(scanf("%d",&n)!=EOF)
    {
        a[0]=1;temp=0;t=0;
        for(i=2;i<=n;i++)
        {
            for(j=0;j<=t;j++)
            {
                a[j]=a[j]*i+temp;
                temp=a[j]/100000;
                a[j]%=100000;
                
            }
            if(temp!=0)
                a[++t]=temp;
            temp=0;
        }
        printf("%d",a[t]);
        for(i=t-1;i>=0;i--)
            printf("%05d",a[i]);
        printf("\n");
    }
    return 0;
}

我的模拟

第2个回答  2013-10-22
100的阶乘,就非常大了,超过最大数了,你把得数改成浮点数就可以了大约表示了。结果大约是9,加后面157个0,计算整数表示不了这么大数的
第3个回答  2013-10-22
得数超出范围了,在定义时需要选择合适的范围。

 名称 全称类型说明符 缩写类型说明符 位数 范围
  整型 int int 16位 -32768至+32767
  无符号整型 unsigned int unsigned 16位 0 至 65,535
  短整型 short int short 16位 -32768至+32767
  无符号短整型 unsigned short int unsigned short 16位 0 至 65,535
  长整型 long int long 32位 -2,147,483,648 至 2,147,483,647
  无符号长整型 unsigned long int unsigned long 32位 0至4,294,967,295
第4个回答  2013-10-22


// 100的阶乘超出了范围,改为double也只能用指数的形式显示:

#include "stdafx.h"

#include<iostream>

using namespace std;

unsigned long double Factorial(int n)

{

if(n==1) return 1;

else return Factorial(n-1)*n;

}

int _tmain(int argc, _TCHAR* argv[])

{

cout<<Factorial(100)<<endl;

return 0;

}

本回答被提问者采纳

C++程序里 100的阶乘为什么不能显示出来! 10以内的阶乘可以显示!! 求...
100的阶乘已经超过了 int 和 long long(__int64) 的取值范围了,如果你想要做,需要用字符串模拟乘法运算模拟出答案 include <iostream>using namespace std;int main(){ int a[10000]; int i,j,temp,t,n; while(scanf("%d",&n)!=EOF) { a[0]=1;temp=0;t=0; ...

C++运算100的阶乘..弱爆的运算为什么结果不对?程序哪错了?求解答!!
100的阶乘很大,溢出好几条街了、、、你用浮点,可以得到近似结果, 或者自己写代码,结果保存在一个数组里

使用C++运算100!
代码计算逻辑无错,但没有写输出语句,所以无输出。在最后一个}前加一句cout << a << endl;就有输出了。不过输出肯定是错误的,因为100!太大了,溢出了;32位平台下int的范围大约只能做到12!,long long或__int64型变量可以做到约20!。100!得自定义数据类型。

如何用c++求100的阶乘?
求100的阶乘,首先应了解阶乘与Gamma函数的关系。C++11内置了计算Gamma函数的函数std::tgamma和其对数版本std::lgamma。运行结果表明两者一致。对于小值,斯特林公式能提供近似值,n越小越接近精确结果,n越大结果越准确。运行显示,此方法有效。然而,std::tgamma和std::lgamma只能处理至170的阶乘。求更...

求c++ 1乘到100得结果!!!
上楼用的是C语言的,放到C++里面是编译通不过的,实际上这个东西相当简单了。另外注意的一个问题就是说,1连乘到100,得到来的值非常非常大,如果存放到INT里面,是会越界的。include "iostream.h"using namespace std; \/\/VC6.0的话,这句可以注释掉,VC其它版本可能要添加 inline long double ...

如何用c++编写一程序计算100的阶乘
阶乘算法(0---10000)include<stdlib.h> include<iostream.h> include<iomanip.h> const int N=1000;int compute(unsigned int *s,int n)\/\/s用来存储一次的计算结果,n为本次计算的乘数,函数返回结果中有效数据的节数 { unsigned long p; \/\/暂时存放一节的结果 unsigned long more=0;\/\/一次...

c++计算阶乘的算法,为啥错了??
20的阶乘是个巨大的数字,超过long int型所能表示的范围了,所以计算出来的结果不正确了,你把m也换成double型的试试。20阶乘的值如下图:

c++编写程序精确计算100!的值
void Compute(int n){ \/\/一个int值n乘以一个数组 \/\/数组的第0位表示大数的最低位 \/\/思路: \/\/先用最低位乘以n \/\/最低位的进位肯定是0,所以result[j] += aboveTen;没有问题 \/\/十位数以上的值都是应该加到下一位的,暂时存储在变量aboveTen里面 aboveTen = result[j] \/10; \/\/然后将...

求C++程序:用数组存1到1000的阶乘的结果,并每个数都打印出来
直接利用2L的代码,放到一个循环中即可.但因为输出太长了,DOS屏幕是显示不下的 include<iostream> using namespace std;int main(){ int a[100000],i,j;int n=1;while(n<=1000){ memset(a,0,sizeof(a));a[0]=1;int jin,count=1;for(i=1;i<=n;i++){ jin=0;for(j=0;j<count...

求10^100!的C或C++代码
上面几楼都不可以成功,因为他们没有考虑100!结果太大 著名的计算机科学家奥思提出一个公式:程序 = 数据结构 + 算法 这里面要考虑高进位问题,因为100!的结果很大,即使是long int也不够,所以得特殊考虑。我先给出一般的:1!~~15!的程序 我用的是递归 include <stdio.h> include <stdlib.h...

相似回答