首页 > 编程知识 正文

用c语言算100的阶乘,c语言1的阶乘加到100的阶乘

时间:2023-05-06 01:28:43 阅读:272523 作者:4013

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("%dn", a);

}

100的阶乘法要用高精度了,即用数组来模拟。

------解决方案--------------------

求100的阶乘有一个比较简单的办法就是将int类型改为double类型

------解决方案--------------------

修改数据类型,扩大范围就行了

------解决方案--------------------

你搜一下   大数阶乘,很多人专门研究这个

------解决方案--------------------

不知道这个算不算答案

#include "stdio.h"

int main()

{

double a=1;

int b=2;

while(b<=100)

{

a=a*b;

b++;

}

printf("%gn",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;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。