c - 如何检查一个号码是否只有唯一数字?
问题描述
例如,2345 是唯一数字,因为没有数字显示两次,但 3324 不是唯一数字,因为 3 出现了两次。我尝试使用 % 但我作为(代码)显示但我没有得到数字我得到数字,编辑:你不能使用字符串
number%10==number%100||number%10==number%1000||number%100==number%1000
解决方案
您可以使用一个包含 10 个标志的数组来指示是否已经看到了一个数字。在循环中遍历数字,提取个位,检查是否已看到该数字,将数字标记为已看到,然后将数字除以 10 以进行下一次迭代。
正如@Bathsheba 所指出的,在处理负数时需要小心。
例如:
int unique(long long int number)
{
char seen[10] = {0};
while (number) {
int digit = number % 10;
number /= 10;
if (digit < 0) {
/*
* The number was negative. Make it positive.
* (Note: Checking the number is negative before the while
* loop could fail when number is LLONG_MIN, so do it here
* instead.)
*/
digit = -digit;
number = -number;
}
if (seen[digit]++)
return 0; /* not unique */
}
return 1; /* unique */
}
long long int
如果需要同时处理和,则可能需要单独的函数unsigned long long int
,但处理的函数long long int
可以使用unsigned long long int
如下处理的函数:
#include <limits.h>
int unique_ull(unsigned long long int number)
{
char seen[10] = {0};
while (number) {
int digit = number % 10;
number /= 10;
if (seen[digit]++)
return 0; /* not unique */
}
return 1; /* unique */
}
int unique_ll(long long int number)
{
unsigned long long int n;
/* Represent original number as a 2's complement number. */
n = number;
if (n > LLONG_MAX) {
/*
* Original number was negative, so take its 2's complement to "negate" it.
* (Note: This works even when original number is LLONG_MIN.)
*/
n = -n;
}
/* Handle as an unsigned long long int. */
return unique_ull(n);
}
intmax_t
我想以同样的方式支持和支持会很有用uintmax_t
:
#include <stdint.h>
int unique_um(uintmax_t number)
{
char seen[10] = {0};
while (number) {
int digit = number % 10;
number /= 10;
if (seen[digit]++)
return 0; /* not unique */
}
return 1; /* unique */
}
int unique_m(intmax_t number)
{
uintmax_t n;
/* Represent original number as a 2's complement number. */
n = number;
if (n > INTMAX_MAX) {
/*
* Original number was negative, so take its 2's complement to "negate" it.
* (Note: This works even when original number is INTMAX_MIN.)
*/
n = -n;
}
/* Handle as a uintmax_t. */
return unique_um(n);
}
推荐阅读
- javascript - 如何使用 FilePond 使所选文件类型仅作为 docx 可接受?
- android-studio - Flutter 开发环境中的加速模拟器
- c++ - 在一个静态库项目中使用两个动态库
- python - TypeError:只能将str(不是“numpy.uint8”)连接到str
- python-3.x - 如何使用scrapy python从img标签获取srcset
- c# - 部署 Outlook VSTO 插件后 Win 表单未打开?
- python - 无法分配“8”:“Comment.post”必须是“Post”实例
- c++ - 在对 GPU 内核进行 doxygen 注释时,如何记录有关网格的信息?
- javascript - 使用 relativeTo 以编程方式导航嵌套路由会导致“错误:无法匹配任何路由”。
- python - 熊猫仅在存在一定数量的数值时才取平均值