P1012 [NOIP1998 提高组] 拼数 - 洛谷 | 计算机科学教育新生态
在 C++ 中,如果你用 std::string
类型来存储数字并进行比较,系统比较的是这两个字符串的字典顺序(lexicographical order),而不是数值大小。这意味着比较是按字符逐个进行的,类似于字典中单词的排列方式。
比较规则:
-
字符逐个比较:从第一个字符开始逐个比较,如果第一个字符不同,就根据字符的 ASCII 值决定大小;如果相同,就继续比较下一个字符。
-
长度:如果两个字符串的前面部分完全相同,比较将继续到较短字符串的末尾。此时,较短的字符串被视为较小的字符串。
示例
#include <iostream>
#include <string>
int main() {
std::string a = "12345";
std::string b = "1234";
if (a > b) {
std::cout << "a is greater than b" << std::endl; // 输出
} else {
std::cout << "a is not greater than b" << std::endl;
}
return 0;
}
在这个例子中,尽管 a
和 b
都表示数字,a
是 "12345",b
是 "1234"。在字符串比较中,"12345" 会被认为是大于 "1234"。
如果需要数值比较
如果你想按数值比较字符串中的数字,可以将它们转换为整数或浮点数,例如使用 std::stoi
或 std::stoll
等函数。示例:
#include <iostream>
#include <string>
int main() {
std::string a = "12345";
std::string b = "1234";
if (std::stoll(a) > std::stoll(b)) {
std::cout << "a is greater than b" << std::endl; // 输出
} else {
std::cout << "a is not greater than b" << std::endl;
}
return 0;
}
在这个例子中,std::stoll
将字符串转换为长整型,从而可以进行数值比较。