题目内容:
从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字,则显示“Repeated digit!”;否则显示“No repeated digit!”.
[注]待检测数据存储在变量n中.
#include<stdio.h>
#define MaxSize 32
short CheckRepeatedNum(short [], short);
int main()
{
short i;
/* n存储待检测数据 */
long n;
/* 开辟数组空间 */
/* 经粗略估计, 预留32位数字给待检测数据是足够的 */
short data[MaxSize];
printf("Input n:\n");
/* 增加输入容错机制 */
/* 输入待检测数据 */
while(scanf("%ld", &n) != 1 || n < 0)
{
while(getchar() != '\n') ;
printf("请输入合法数据.\n");
printf("Input n:\n");
}
/* 将数据n按位分解(倒序存储) */
i = 0;
while(n != 0)
{
data[i] = n % 10;
n /= 10;
i ++;
}
/* 循环结束后, i的值即为数据元素个数 */
/* */
if(CheckRepeatedNum(data, i) == 1)
{
/* 有重复数据 */
printf("Repeated digit!\n");
}
else
{
/* 无重复数据 */
printf("No repeated digit!\n");
}
/* */
return 0;
}
/* 检查数组s[]内有无重复数据, length为数据元素个数 */
short CheckRepeatedNum(short s[], short length)
{
long i, j;
for(i = 0; i < length; i ++)
{
for(j = i + 1; j < length; j ++)
{
if(s[i] == s[j])
{
/* 发现重复元素, 直接返回1即可 */
return 1;
}
}
}
/* 没找到重复元素, 返回0 */
return 0;
}