0votos

numero repetidos en C

por josejuan hace 5 años

Esta es muy eficiente, aunque aún hay (al menos) otra más rápida ;D

programa en c que determine si un numero tiene digitos repetidos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h> 
#include <stdlib.h> 
#include <limits.h> 
 
#define ulong unsigned long long 
 
int nonNegativeRepeatedDigits(ulong n) { 
 
    // sólo necesario en 64bits o más 
    if(n >= 9999999999ULL) 
        return 1; 
 
    ulong bits = 0; 
    while(n) { 
        ulong msk = 1 << (n % 10); 
        if(msk & bits) 
            return 1; 
        n /= 10; 
        bits |= msk; 
 
    return 0; 
 
 
int integerRepeatedDigits(ulong n) { 
    if(n < 0) 
        return nonNegativeRepeatedDigits(-n); 
    return nonNegativeRepeatedDigits(n); 
 
void main(int argc, char **argv) { 
    printf("Max. supported number: %llu\n", LLONG_MAX); 
    printf("Min. supported number: -%llu\n", LLONG_MIN); 
    printf("%i\n", integerRepeatedDigits(atoi(argv[1]))); 
 
 
/* 
 
Por ejemplo: 
 
$ ./repdig 9223372036854775807 
Max. supported number: 9223372036854775807 
Min. supported number: -9223372036854775808 
 
*/ 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.