判断一个不超过9位的无符号整数中是否存在重复的数字

 比较笨一点的方法:

#include<stdio.h>
int main()
{
	//判断重复数字
	int i,j,loop=1,num,n,len=0;
	int digital[9];
	printf("请输入一个正整数:");
	scanf("%d",&num);
	n=num;
	do
	{
		digital[len]=n%10;
		n=n/10;
		len++;
	}while(n!=0);
	printf("%d是一个%d位整数.\n",num,len);
	for(i=0;loop&&i<len-1;i++)//判断数组中是否有取值相同的元素,找到相同元素则结束循环
	{
		for(j=i+1;loop&&j<len;j++)
		{
			if(digital[i]==digital[j])
			{
				loop=0;
			}
		}
	}
	if(loop)
	{
		printf("整数%d中没有重复的数字.\n",num);
	}
	else
	{
		printf("整数%d中有重复的数字.\n",num);
	} 
	return 0;
}

比较聪明一点的方法:

#include<stdio.h>
#define N 10 
int main()
{
	//判断重复数字
	int i,num,t,loop=0;
	int digital[N]={0};
	printf("请输入一个不超过9位数的正整数:");
	scanf("%d",&num);
//	for(i=0;i<N;i++)//for循环容易出错,这里不使用,这里应该错了,还要判断N多少次 
//	{
//		t=num%10;
//		digital[t]++;
//		num=num/10;	
//	}

	t=num;//最后printf中还要用到num这个数,如果不提前放到变量中,直接取模相除,最后num=0 
	do
	{
		digital[t%10]++;
		t=t/10;
	}while(t!=0);
	
	for(i=0;i<N;i++)
	{
		if(digital[i]>1)
		{
			loop=1; 
		}
	}
	if(loop)
	{
		printf("%d这个正整数中有相同的数字!\n",num);
	}
	else
	{
		printf("%d这个正整数中没有相同的数字!\n",num);	
	}
	
//	for(i=0;i<N;i++) //这种方法不需要使用到loop变量 ,但我的电脑管家会帮我删掉这个程序
//	{
//		if(digital[i]>1)
//		{
//			break;	
//		}
//	}
//	if(i<10)
//	{
//		printf("%d这个正整数中有相同的数字!\n",num);
//	}
//	else
//	{
//		printf("%d这个正整数中没有相同的数字!\n",num);	
//	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_55848732/article/details/132036278
今日推荐