我想打印两个数字范围内的数字(包括这两个数字)。
我创建了这个简单的代码:
#include <iostream>
int main(int argc, char *argv[]) {
int one = -5;
int two = 5;
unsigned int count = 0;
int min = std::min(one, two);
int max = std::max(one, two);
while (min <= max) {
count++;
min++;
}
std::cout << count << std::endl;
return 0;
}
在这个例子中,我使用-5到5,它正确打印11。
如何改进此算法,使其工作没有问题,数字范围从例如-1亿到10亿?
或者代码是否正常?
答案 0 :(得分:2)
该范围内的数字只是差异+ 1:
count = max - min + 1;
或者,如果不评估哪个是最大值,哪个最小值,则使用差值的绝对值
count = std::abs(one - two) + 1;
答案 1 :(得分:0)
也许我错过了什么,但是
#include <iostream>
int main(int argc, char *argv[]) {
int one = -5;
int two = 5;
unsigned int count = std::abs(one-two)+1;
std::cout << count << std::endl;
return 0;
}
应该完全按照自己的意愿行事吗?
这将给出-5和-5的11,这实际上是-5和5之间的数字计数,包括两者。如果您想要打印10,正如您在排队时所说,您必须删除+1
。
答案 2 :(得分:-1)
您需要使用可包含此类数字范围的整数类型。目前,C ++中最基本的有符号整数类型是long long int
你可以通过使用表达式获得它可以存储的数字范围
std::numeric_limits<long long int>::min()
和std::numeric_limits<long long int>::max()
结构std::numeric_limits
在标头<limits>
例如
#include <iostream>
#include <limits>
int main()
{
std::cout << std::numeric_limits<long long int>::min() << " - "
<< std::numeric_limits<long long int>::max() << std::endl;
}
如果程序要求用户输入两个数字也会更好。对于大范围,最好使用简单的算术表达式来获取计数器,而不是使用循环。