注册 登录
编程论坛 C++教室

如何不用科学计数法显示阶乘?

哈库拉玛塔塔 发布于 2014-06-28 11:53, 705 次点击
计算100的阶乘,我不想让结果显示成科学计数的   怎么做?想要看到完整的整数
#include <iostream>
using namespace std;
long double a=1;
long double b=2;
int c=1;
int main()
{
 while (b<=100)
 {
  cout<<c<<'\t';
  a*=b;
  cout<<a<<endl;
  b++;
  c++;
 }
 cin.get();
 return 0;
}

[ 本帖最后由 哈库拉玛塔塔 于 2014-6-28 11:57 编辑 ]
7 回复
#2
wp2319572014-06-28 12:31
long double 不足以支持显示100的阶乘
#3
哈库拉玛塔塔2014-06-28 12:52
回复 2 楼 wp231957
那我要怎么做呢?
#4
邵帅2014-06-28 15:33
回复 3 楼 哈库拉玛塔塔
有种想法不知道能否实现:

自己设计一个类用来表示大数据的存储,并实现*,=等运算符重载
#5
zklhp2014-06-28 15:33
要么自己实现大数运算 要么用大数库 举个栗子

程序代码:

#include <iostream>
#include <gmp.h>
#include <gmpxx.h>

using std::cout;
using std::cin;
using std::endl;

int main(void)
{
    unsigned long n = 1;
    cin >> n;
    mpz_class result(1);
    mpz_fac_ui(result.get_mpz_t(), n);
    cout << result << endl;
   
    return 0;
}


编译参数
g++ -Wall -march=corei7-avx -Ofast -msse4.2 -mavx -std=c++11 a.cpp -lgmp -lgmpxx -lm -o a

运行
100
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

#6
zklhp2014-06-28 15:34
以下是引用zklhp在2014-6-28 15:33:39的发言:

要么自己实现大数运算 要么用大数库 举个栗子

 
#include  
#include  
#include  
 
using std::cout;
using std::cin;
using std::endl;
 
int main(void)
{
    unsigned long n = 1;
    cin >> n;
    mpz_class result(1);
    mpz_fac_ui(result.get_mpz_t(), n);
    cout << result << endl;
   
    return 0;
}


编译参数
g++ -Wall -march=corei7-avx -Ofast -msse4.2 -mavx -std=c++11 a.cpp -lgmp -lgmpxx -lm -o a

运行
100
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

这是用GNU MP这个大数库的例子

库的网址
https://
#7
stop12042014-07-02 22:53
回复 2 楼 wp231957
为什么不行? 100! = -1.71024e+123
#8
stop12042014-07-02 22:58
回复 3 楼 哈库拉玛塔塔
或者有一种比较麻烦的用字符串数组表示.
乘与被乘数存入字符串数组.. 然后 让它们一个个相乘. 结果存入另一个数组.
然后以字符方式显示出来.
1