首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

学生一个,求帮助、int 范围有关问题

2013-03-25 
学生一个,求帮助、、int 范围问题//求1*2*3……*n刚好超出int范围的n值。#includeiostreamusing namespace st

学生一个,求帮助、、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;

}

[解决办法]
^在这里是一个 位异或运算符 不是幂运算 
[解决办法]

引用:
引用:幂运算就是2的几次方  2147483647等值代换什么就是2的31次方-1

太大了,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
[解决办法]
引用:
引用:引用:引用:最大的int 可以这样计算
(unsigned int)-1试过,还是不行呢

怎么不行???
are you sure?
这个问题 我非常确定告诉你 你自己搞错了
确实错了啊 这是代码 黑框不输出任何值#include<iostream……


自己算法有问题
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;

}

热点排行