C++中如何对比序列实现校验数字是否包含0-9所有数位的功能
C++全数位校验实现与序列对比方法
一、等价功能实现
你提供的Python代码核心是判断输入数字是否包含0-9全部10个数位,以下是两种C++实现方案:
1. 对齐原Python逻辑的实现
完全复现你原代码的逐位取数、反转列表、遍历校验逻辑:
#include <vector> #include <algorithm> bool val_checker(long long n) { std::vector<int> values = {0,1,2,3,4,5,6,7,8,9}; std::vector<int> lst; // 逐位提取数字,对应Python的(n // 10**i) % 10逻辑 long long temp = n; while (temp > 0) { lst.push_back(temp % 10); temp /= 10; } // 反转列表,对应Python的lst[::-1] std::reverse(lst.begin(), lst.end()); // 对应Python的all(i in lst for i in values) for (int num : values) { if (std::find(lst.begin(), lst.end(), num) == lst.end()) { return false; } } return true; }
2. 精简高效实现
利用布尔数组标记数位出现状态,无需额外存储所有数位,性能更高:
#include <string> bool val_checker(long long n) { bool exist[10] = {false}; // 直接转字符串遍历数位 for (char c : std::to_string(n)) { exist[c - '0'] = true; } // 校验所有数位是否都出现 for (bool flag : exist) { if (!flag) return false; } return true; }
二、C++序列对比方法
C++中和Python列表等价的常用序列结构是std::vector、std::array,对比方法分三类:
- 顺序敏感的全等对比:要求两个序列长度相同、对应位置元素完全一致
可以直接用STL容器重载的==运算符,写法最简洁:
也可以用std::vector<int> list1 = {1,2,3,4}; std::vector<int> list2 = {1,2,3,4}; bool is_equal = (list1 == list2); // 返回true<algorithm>头文件的std::equal函数实现相同效果。 - 不要求顺序的内容对比:只需要两个序列包含的元素完全相同,不管排列顺序
先对两个序列排序后再用==对比即可:#include <algorithm> std::vector<int> a = {3,1,2}; std::vector<int> b = {2,3,1}; std::sort(a.begin(), a.end()); std::sort(b.begin(), b.end()); bool same_content = (a == b); // 返回true - 包含关系对比:判断一个序列的所有元素是否都在另一个序列中存在(和你原代码的
all(i in lst)逻辑一致)
用std::find遍历查找即可,示例:// 判断val的所有元素是否都在lst中存在 bool all_exist = true; for (int num : val) { if (std::find(lst.begin(), lst.end(), num) == lst.end()) { all_exist = false; break; } }
内容的提问来源于stack exchange,提问作者KriSD
相关产品推荐
相关产品推荐

