1163028233 发表于 2022-7-21 20:35:42

判断整数中是否有重复数字问题

输入一个不超过9位数的无符号整数,判断该整数中是否存在重复的数字
#include<stdio.h>
int main(){
        int i,num,n;
        int count={0};
        printf("请输入一个正整数:");
        scanf("%d", &num);
        n=num;
        do{
                count++;//统计数字n%10在整数n中出现的次数
                n=n/10;
        }while(n!=0);
        for(i=0;i<10;i++)
          if(count>1)
                   break;
        if(i<10)
           printf("整数%d中存在重复的数字.\n", num);
        else
           printf("整数%d中没有重复的数字.\n", num);
        return 0;
}
想问下这个count++;数组中n%10在数组中是什么意思,数组不是一个一个的存储嘛?然后++是指数组向下一个推,比如count里是1,count里是2,就是从1指向2?
for(i=0;i<10;i++)
          if(count>1)
                   break;这里遍历的count又是什么意思?count里是2那也大于1啊

jhq999 发表于 2022-7-21 21:19:24

n=786
n%10=6
count就是count
如果count=2;count++;
那么count=3

1163028233 发表于 2022-7-21 21:27:03

jhq999 发表于 2022-7-21 21:19
n=786
n%10=6
count就是count


比如n=6786,他是如何计算n中有重复数字的?

jhq999 发表于 2022-7-21 21:27:42

本帖最后由 jhq999 于 2022-7-21 21:40 编辑

#include<stdio.h>
int main(){
      char ch;
      int count={0},num=0;
      printf("请输入一个正整数:");
      while((ch=getchar())>='0'&&ch<='9')
        {
                if(count)count=-1;
                count++;
                num=num*10+ch;
        }
      
      if(count<0)
         printf("整数%d中存在重复的数字.\n", num);
      else
         printf("整数%d中没有重复的数字.\n", num);
      return 0;
}

jhq999 发表于 2022-7-21 21:32:29

1163028233 发表于 2022-7-21 21:27
比如n=6786,他是如何计算n中有重复数字的?

n=6786;
count++;\\count++;count=1;
///////////////
n=n/10=678;
count++;\\count++;count=1;
……
n=6;
count++;\\count++;count=2>1;

桃花飞舞 发表于 2022-7-21 23:27:15

本帖最后由 桃花飞舞 于 2022-7-21 23:33 编辑

想问下这个count++;数组中n%10在数组中是   % 是取余符号, n%10 求n的个位数的值并不是给数组每一个元素都赋值,只给数组中重复出现的下标的值++,和 n = n / 10是一起看就懂了,数组不是一个一个的存储嘛?然后++是指数组向下一个推,比如count里是1,count里是2,就是从1指向2?int count={0};count数组中的元素值都是0   count++意思就是只要数n中出现了的数字都作为count数组的下标就把下标对应的值加一,如果出现一次则下标对应的值是0+1 是1 ,出现重复的下标++后的值一定大于1
for(i=0;i<10;i++)
            if(count>1)
                   break;这里遍历的count又是什么意思?count里是2那也大于1啊
这里遍历count,count中的值也就是数字n中自然数0~9出现的次数,count的初始值都是0,如果count的值为0也就是说i对应的自然数没有出现过。遍历就是为了找出数组count中,下标i对应的自然数出现重复的那个。
你也可以用别的方法来做

额外减小 发表于 2022-7-23 14:49:34

n%10的目的是依次分离个位,十位,百位等数位中的数字,然后每看到一个数字x,count(x)就增加1,比如个位是1,count(1)就自增1,十位还是1,count(1)就再自增1变为2,等等。所以只要出现重复的数字,数组count中必有一个元素大于1,然后最后的for循环就是判断是否有元素大于1

1163028233 发表于 2022-8-2 20:44:48

jhq999 发表于 2022-7-21 21:19
n=786
n%10=6
count就是count


意思是就是count一开始都赋0,如果有重复的就会使得count中某一下标中的数大于1,所以后面才有循环当i>1则跳过,如果没重复的i一直加到10,所以i<10才会重复,如果i>=10那么就不会重复,这个程序是这样理解把?

1163028233 发表于 2022-8-2 20:58:42

额外减小 发表于 2022-7-23 14:49
n%10的目的是依次分离个位,十位,百位等数位中的数字,然后每看到一个数字x,count(x)就增加1,比如个位是 ...

意思是就是count一开始都赋0,如果有重复的就会使得count中某一下标中的数大于1,所以后面才有循环当i>1则跳过,如果没重复的i一直加到10,所以i<10才会重复,如果i>=10那么就不会重复,这个程序是这样理解把?

额外减小 发表于 2022-8-3 00:12:34

1163028233 发表于 2022-8-2 20:58
意思是就是count一开始都赋0,如果有重复的就会使得count中某一下标中的数大于1,所以后面才有循环当 ...

页: [1]
查看完整版本: 判断整数中是否有重复数字问题