C语言问题,关于检查数中重复出现的数字 循环中的的语句希望高手解释下
答案:3 悬赏:10 手机版
解决时间 2021-11-28 22:43
- 提问者网友:风月客
- 2021-11-28 08:28
C语言问题,关于检查数中重复出现的数字 循环中的的语句希望高手解释下
最佳答案
- 五星知识达人网友:舊物识亽
- 2021-11-28 09:55
#include
#define TRUE 1
//#define FALSE 0
typedef int Bool;
void main()
{
Bool digit_seen[10]={0}; //存放0-9这10个数字出现的次数
int digit;
long int n;
printf("Enter a number:");
scanf("%ld",&n);
while(n>0) //用辗转相除法
{
digit=n%10; //n的右边第1位数
if(digit_seen[digit]) //检查digit_seen[digit]数组这个digit出现过没有,如果出现过则退出循环
break;
digit_seen[digit]=TRUE; //如没出现过就把digit_seen[digit]这个数字出现的次数设为1
n/=10; // n=n整除10的商,如123/10=12 ,下次用12做上面重复的步骤
}
if(n>0) //如果循环结束后n的值不为0,表示是循环中途用break中断退出循环的,表示有重复
printf("Repeat digit\n\n");
else
printf("No repeat digit\n\n");
}
#define TRUE 1
//#define FALSE 0
typedef int Bool;
void main()
{
Bool digit_seen[10]={0}; //存放0-9这10个数字出现的次数
int digit;
long int n;
printf("Enter a number:");
scanf("%ld",&n);
while(n>0) //用辗转相除法
{
digit=n%10; //n的右边第1位数
if(digit_seen[digit]) //检查digit_seen[digit]数组这个digit出现过没有,如果出现过则退出循环
break;
digit_seen[digit]=TRUE; //如没出现过就把digit_seen[digit]这个数字出现的次数设为1
n/=10; // n=n整除10的商,如123/10=12 ,下次用12做上面重复的步骤
}
if(n>0) //如果循环结束后n的值不为0,表示是循环中途用break中断退出循环的,表示有重复
printf("Repeat digit\n\n");
else
printf("No repeat digit\n\n");
}
全部回答
- 1楼网友:佘樂
- 2021-11-28 12:44
调试下 感觉不太对
- 2楼网友:孤独入客枕
- 2021-11-28 11:05
取这个数的个位,存在digit里,看是不是出现过,如果出现过,就退出,没有出现过就记录“出现过”,最后除以10,就相当于把个位去掉,原来的十位变成个位,百位变成十位……
digit_seen[i]里记录的是bool变量,只有真和假,用来表示 i 这个数字是不是出现过
例如个位是5,那就判断digit_seen[5]存的是true 还是 false 。如果是true,说明5已经是第二次出现了,如果是false ,就记录下,以便下次再看见5就判断“出现重复了”
digit_seen[i]里记录的是bool变量,只有真和假,用来表示 i 这个数字是不是出现过
例如个位是5,那就判断digit_seen[5]存的是true 还是 false 。如果是true,说明5已经是第二次出现了,如果是false ,就记录下,以便下次再看见5就判断“出现重复了”
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯