范围算法中的计数数字(C ++)

时间:2014-05-04 10:55:05

标签: c++ algorithm count range

我想打印两个数字范围内的数字(包括这两个数字)。

我创建了这个简单的代码:

#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亿?

或者代码是否正常?

3 个答案:

答案 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;
}

如果程序要求用户输入两个数字也会更好。对于大范围,最好使用简单的算术表达式来获取计数器,而不是使用循环。