Ваш способ вычисления кратных n делать n = n * i/(i-1);
неверен, поэтому, по крайней мере, для 23 вы думаете, что вы найдете кратное 23, состоящее из 0 и 9, но это число не кратно23.
Исправленная версия вашего предложения, проверяющая кратное от n до решения, может быть:
#include <stdio.h>
int main(void)
{
int n;
if ((scanf("%d", &n) == 1) && (n > 0)) {
int multn;
for (multn = n; ; multn += n) {
/* only 9 and 0 ? */
int j;
for (j = multn; j > 0; j /= 10) {
int digit = j % 10;
if ((digit != 0) && (digit != 9))
break;
}
if (j == 0)
/* only 9 and 0 ! */
break;
}
printf("%d -> %d (remainder = %d)\n", n, multn, multn%n);
}
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra m.c
pi@raspberrypi:/tmp $ ./a.out
1
1 -> 9 (remainder = 0)
pi@raspberrypi:/tmp $ ./a.out
2
2 -> 90 (remainder = 0)
pi@raspberrypi:/tmp $ ./a.out
3
3 -> 9 (remainder = 0)
pi@raspberrypi:/tmp $ ./a.out
23
23 -> 990909 (remainder = 0)
pi@raspberrypi:/tmp $ ./a.out
32
32 -> 900000 (remainder = 0)
pi@raspberrypi:/tmp $ ./a.out
11111111
11111111 -> 99999999 (remainder = 0)
pi@raspberrypi:/tmp $ ./a.out
12345678
12345678 -> 9900900 (remainder = 9900900)
pi@raspberrypi:/tmp $
Примечание: последняя попытка вызывает переполнение ( int на 32b), и результат неверен, но нет гарантии, что программа завершится в случае переполнения.