【发布时间】:2015-01-19 20:20:30
【问题描述】:
编辑 - 更改标题以匹配实际问题陈述。
我正在编写一个函数来计算 100 中数字的总和!但我似乎有两个大问题。
100的实际结果!仅限前几个数字(实际结果是93326215999390750859939075968993895088993989508899398950898938950889939895089939895088993989508989389508899389508C0000/389508899389508C0000/3885689993989508993989508993939508393986508C0000W/2950898939395089993989508893989508C0000“() LI>
我将结果数字的位数相加的方法没有输出正确的结果。
这是我当前的代码:
void factorialSum()
{
double fact100 = factorial(100);
double suma = 0;
printf("100! is equal to: %.0f", fact100);
while (fact100 > 0)
{
double temporal = fmod(fact100, 10);
suma = suma + temporal;
fact100 = fact100/10;
}
printf("\nThe sum of all digits in 100! is: %.0f", suma);
}
而函数factorial()定义为:
double factorial (double n)
{
double mult = 1;
double i = n;
while (i>=1)
{
mult *= i;
i = i - 1;
}
return mult;
}
在程序输出93326215443944102188325606108575267240944254854960571509166910400407995064242937148632694030450512898042989296944474898258737204311236641477561877016501813248作为100的结果!并说它的数字总和等于666。
感谢您的帮助,谢谢。
【问题讨论】:
-
对于这么大的数字,使用双精度或任何类型的浮点表示真的开始失去精度。您正在处理巨大的整数,因此您需要某种无限精度整数库。
-
您可以使用"GMP" - The GNU Multiple Precision Arithmetic Library 进行类似的操作。
-
解决此问题的方法的链接:find sum of digits in 100!