Hallo,
ich sage es mal diplomatisch so: Man kann fast jedes Programm in jeder Programmiersprache langsamer machen. Und es kommt auf den Compiler an.
Ohne libc-Routinen läuft Dein Programm bei mir statt in 89 Sekunden in 21. Den Algorithmus noch durch ein Radix-Search ersetzt in 10 Sekunden. Die Java-Variante (IBM Semeru)
Version gcc-7 icc-11 semeru
original 97 89 21
nolibc 22 19 21
radix 16 10 16
Hier der Radix-Code:
#include <stdio.h>
#include <stdint.h>
static int
repeats(size_t i)
{
unsigned char counter[10U] = {0};
do {
if (counter[(i % 10U)]++ >= 1U) {
return 0;
}
} while (i /= 10U);
return 1;
}
int main() {
int counter = 0; // zaehlt Zahlen ohne Wiederholungen von Ziffern in der Zahl
for (size_t i=1000; i<999999999; ++i) {
counter += repeats(i);
}
printf("%d\n\r", counter);
return 0;
}