检测数字中的重复数字
Detecting repeating digits in a number
我正在尝试构建一个将整数作为输入的方法。然后将该整数拆分为个位数,然后将它们存储在向量中。然后我使用sort((对向量进行排序,这样我就可以检测到向量中的任何重复元素。在第一次重复时,我要返回True,如果没有重复,我想返回False。
#include <iostream>
#include <vector>
bool RepeatDigit(int number){
vector<int> temp;
while (number > 0){
int digit = number % 10;
number /= 10;
temp.push_back(digit);
}
sort(temp.begin(),temp.end());
for (int i = 0; i < temp.size() - 1; i++){
if (temp[i] == temp[i+1]){
return true;
break;
} else {
return false;
break;
}
}
return(0);
}
但是当我在另一种方法中使用这个方法来过滤if语句中的重复数字时:
if (numerator % n == 0 && RepeatDigit(numerator) == false){
//Do Stuff
}
它似乎无法正常工作,带有重复数字的数字似乎仍未被过滤掉。有人能告诉我问题出在哪里吗?或者有更简单的方法来完成这个操作吗?
删除else
分支-这会导致循环在第一次迭代时中断,因此它只检查temp
中的第一个数字是否重复。
此外,您可以简单地编写!RepeatDigit(numerator)
而不是RepeatDigit(numerator) == false
O(n)
。它检查当前数字是否已被读取:
bool IsNumRepeating(int num)
{
std::array<bool, 10> arr;
for(; num > 0; num /= 10)
{
int digit = num % 10;
if(arr[digit]) return true;
arr[digit] = true;
}
return false;
}
或者,您可以将数字转换为std::string
,然后检查重复字符(较慢(:
bool IsNumRepeating(int num)
{
std::string str = std::to_string(num);
for(size_t i = 0; i < str.length(); i++)
{
if(std::count(str.begin(), str.end(), str[i]) > 1)
return true;
}
return false;
}
示例:
int main()
{
int num = 1234567891;
bool check = IsNumRepeating(num);
std::cout << "Is " << num << " repeating ?: " << (check ? "true" : "false") << std::endl;
return 0;
}
输出:
Is 1234567891 repeating ?: true
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 使用CMake检测支持的C++标准
- 如何用数字处理log(0)
- 当套接字连接断开时检测C/C++Unix
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 如何检测字符串中的"[" + 数字 + "]"并找到最高数字
- 如何在字符串中检测不同的字母和数字
- 检测<T>某些非数字类型 T 的 std::numeric::type 的特化
- 如何检测控制台输入不是C++中的数字
- C++ 比较 2 个不同列表中的值以使用 2 for 循环摆脱重复的数字。无法正确检测重复项
- 检测几乎为零并将其替换为 0.0 或将它们保留为小数字是否更快?
- 从字符串中检测数字而不是字母的方法.(目前使用istringstream)
- 在检测字符串是否包含数字字符时,这有什么问题
- 如何检测QString是否由所有数字字符组成
- 使用UTF8CPP时如何检测空白或数字