学生一个,求帮助、、int 范围问题
//求1*2*3……*n刚好超出int范围的n值。
#include<iostream>
using namespace std;
int main()
{
int s=1,i=1;
while(s<=(2^31-1)){//为什么程序输出为6??当2147483647等值代换后exe没反应,又是为何?
s*=i; //电脑int型为4位
i++;
}
cout<<i<<endl;
}
[解决办法]
^在这里是一个 位异或运算符 不是幂运算
[解决办法]
太大了,int很小的,是32位0和1 。有符号,所以是2的16次,即正数范围是0-(65536-1),所以楼主的数字太大了。
[解决办法]
最大的int 可以这样计算
(unsigned int)-1
[解决办法]
int c = UINT_MAX; //定义在limits.h中,标准c规定
int d = (unsigned int)-1;
fprintf(stderr,"max is %u %u\n",c,d);
[解决办法]
http://stackoverflow.com/questions/9749930/uint-max-the-same-as-ulong-max-in-c/9749947#9749947
[解决办法]
int 型转无符号整型 为0xFFFFFFFF
[解决办法]
自己算法有问题
s*=i; //这里谁跟你说 两者相乘 就一定不溢出了? s 已经很大了 再乘i 你这里已经溢出了 跳入死循环中去了
#include<iostream>
using namespace std;
int main()
{
unsigned long long int s=1;
unsigned int i=1;
while(s<= ((unsigned int)-1)){
s*=i;
i++;
}
cout<<i<<endl;
}