100的阶乘问题
求解,为什么结果为0,什么事溢出,怎么就会溢出,怎么解决?我刚学习C语言,希望多多关照!
------解决方案--------------------
溢出就是开辟的空间已经不够用了,不能够存放你要表示的数了。
int型的数据最大能表示2的16次方减1,100的阶乘都比这个数大了,肯定不能用int来保存了。
你可以搜下大数处理。
------解决方案--------------------
100的阶乘超过了int类型数的最大值,造成数据溢出,所以结果为0
------解决方案--------------------
每次输出a的值看看,像这样:
int a = 1, b = 2;
while (b <= 100)
{
a = a * b;
b++;
printf("%d\n", a);
}
100的阶乘法要用高精度了,即用数组来模拟。
------解决方案--------------------
求100的阶乘有一个比较简单的办法就是将int类型改为double类型
------解决方案--------------------
修改数据类型,扩大范围就行了
------解决方案--------------------
你搜一下 大数阶乘,很多人专门研究这个
------解决方案--------------------
不知道这个算不算答案
#include "stdio.h"
int main()
{
double a=1;
int b=2;
while(b<=100)
{
a=a*b;
b++;
}
printf("%g\n",a);
getchar ();
return 0;
}
------解决方案--------------------
我觉得这样的数据范围肯定是用高精度来计算了,如果楼主需要的话,我可以发代码
------解决方案--------------------
#include
#include
#include
using namespace std;
int COMPARE(string number1, string number2) {
int i,j;
int length1 = number1.size();
int length2 = number2.size();
if(number1.size() == 0) number1 = "0";
if(number2.size() == 0) number2 = "0";
j = 0;
for(i = 0; i
if(number1[i] == '0') ++j;
else break;
}
number1 = number1.substr(j);
j = 0;
for(i = 0; i
if(number2[i] == '0') ++j;
else break;
}
number2 = number2.substr(j);
length1 = number1.size();
length2 = number2.size();
if(length1 > length2) {
return 1;
} else if(length1 == length2) {
if(number1.compare(number2) > 0) {
return 1;
} else if(number1.compare(number2) == 0) {
return 0;