C语言:如何判断任意数中的是否有重复的数?

如何判断任意一个数中时候有重复的数?
例如输入12344,则可判断有重复的数字4,如果输入12345,则没有重复的数。
那如何来实现呢?
我之前的是利用数组来判断,即将12345拆分成1、2、3、4、5,然后利用for循环对拆分出的数进行判断即可。但是这样就有点麻烦了,而且还要根据输入的长度去重新调整数组的长度和 for 循环。那有什么简化的方法呢?

  1. 假如输入的数是:11345
  2. 定义一个长为10的bool数组
  3. 在while循环中利用求余%算出最后一位数,并将其作为下标修改对应位置的布尔值为真,如果说有重复的数,怎么触发if语句,跳出整个循环。
    程序原理如下图所示:
    在这里插入图片描述

代码如下:

#include<stdio.h>
#include<stdbool.h>
int main(){
	bool digit_seen[10] = {false};
	int digit;
	long n;
	printf("Enter a number: ");
	scanf("%ld",&n);
	while(n>0){
		digit = n%10;
		if(digit_seen[digit]){
			break;
		}
		digit_seen[digit] = true;
		n/=10;
	}
	if(n>0){
		printf("Repeated digit\n");
	}else{
		printf("No repeated digit\n");
	}
	return 0;
}

这个我不知道该怎么才能更好的表达清楚,但心里却是清楚是咋回事的,希望有缘人看到了别放弃,多想想即可。

与君共勉
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值