【发布时间】:2014-05-26 09:32:51
【问题描述】:
为什么下面的程序将 100 的阶乘打印为 0 作为输入。如果 getFact 函数的返回类型为 long double,则可以计算相同的阶乘,但要获得数字总和,我无法在 long double 上应用 mod (%) 运算符。
注意: unsigned long long 和 long double 的大小在我的机器上是相同的。
请建议输入为 100 什么类型的数据会给出正确的输出。
#include <iostream>
#include <stdlib.h>
unsigned long long int getFactorial(int);
unsigned long long int getSum(unsigned long long int);
int main()
{
unsigned long long int fact = 1;
unsigned long long int digsum = 0;
std::cout << "Enter a number to find fact := ";
int num;
std::cin >> num;
fact = getFactorial(num);
std::cout << num <<"'s factorial is = " << fact << std::endl;
digsum = getSum(fact);
std::cout << sizeof(unsigned long long int) << std::endl;
std::cout << sizeof(long double) << std:: endl;
std::cout << "Sum of the digits in the number" << num << "! is :=" << digsum << std::endl;
return 0;
}
unsigned long long int getFactorial(int num)
{
if(num == 1)
return 1;
else
return (num * getFactorial(num - 1));
}
unsigned long long int getSum(unsigned long long int fact)
{
if(fact == 0)
return 0;
else
{
int temp = 0;
temp = fact % 10;
return (temp + getSum(fact/10));
}
}
【问题讨论】:
-
任何标准类型都太小了。你可以使用 boost 或其他东西。
-
尝试在整数数组中可视化乘法的结果,每个数字占用数组中的索引。设计一个使用数组作为存储类型的解决方案。
-
@Surfing_SO 不,100!有 157 个十进制数字,525 个二进制数字。 Google 的结果是一个近似值。
-
@Surfing_SO A
long double和long long是持有号码的完全不同的概念!尽管它们可能占用相同数量的物理空间。
标签: c++ type-conversion factorial