检查输入文件值是否大于10 ^ 9

时间:2012-03-11 17:41:16

标签: c++

所以基本上,我有这样的事情 - 输入文件有2个整数。 代码,像这样 -

#include <iostream>
#include <fstream>
using namespace std;
int main() {
  unsigned long long n, k;
  ifstream input_file("file.txt");
  input_file >> n >> k;
  if(n >= 10^9 || k >= 10^9) {
    cout << "0" << endl;
  }
  return 0;
}

那么,有没有机会检查两个整数中的任何一个是否大于10 ^ 9?基本上,如果我将thoose整数分配给unsigned long long,并且如果它们大于10 ^ 9,它们会自动转换为某个随机值,这符合unsigned long long,我是对的,这意味着没有机会检查一下,还是我错过了什么?

4 个答案:

答案 0 :(得分:3)

我很擅长计算零。那是机器的工作。那么1e9而不是位操作10^9

答案 1 :(得分:1)

在大多数平台上,unsigned long long将能够存储10个 9 而没有任何问题。你只需要说:

if (n >= 1000000000ull)

例如,如果unsigned long long是64位,这是常见的,则最多可存储2个 64

答案 2 :(得分:1)

读入字符串:

std::string s;
input_file >> s;

并检查它是否超过9个字符。如果它正好是9,那么看它不完全是"1000000000"(1和8 0)。

答案 3 :(得分:0)

对于10 ^ 9,你需要写1000000000LL。在C ++中^是按位异或运算符,而不是指数运算符。您还需要LL以确保文字常量被解释为long long,而不仅仅是int

if (n >= 1000000000LL || k >= 1000000000LL)
{
    ...
}

当然,如果用户输入的值太大而无法用long long表示(通常大于2 ^ 63-1),那么您就会遇到更大的问题。