所以基本上,我有这样的事情 - 输入文件有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,我是对的,这意味着没有机会检查一下,还是我错过了什么?
答案 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),那么您就会遇到更大的问题。