Хотя можно повторить любое трехзначное повторение в 32-разрядном int
, три раза невозможно выполнить четыре повторения, поскольку могут быть представлены только все 9-значные десятичные целые числа.
Ваша проблема с тремя повторениями состоит в том, что для каждой рекурсии x
всегда равно 1000 (для трехзначного n), тогда как на самом деле вам нужно, чтобы оно было 1000000 для второй рекурсии. Решить это несколько громоздко, но вам нужно передать x
в number_maker
таким образом:
int number_maker(int n, int k, int x) // <<< additional parameter
{
if(k==1)
return n;
else
{
int xx = x ; // <<< added
while(n * xx >= x) // <<< modified
x *= 10;
return (n*x) + number_maker(n,k-1, x) ;
}
}
Затем вызов, такой как:
printf("%d", number_maker( 350, 3, 1 ) );
будет работать. Это громоздко, потому что вы должны передать начальное значение x
, и это может быть только 1
. В C ++ вы можете использовать аргумент по умолчанию, чтобы скрыть это.
Однако он не будет работать для 4 повторений или трехзначного десятичного целого числа.
Это говорит:
printf("%d", number_maker( 1, 9, 1 ) );
printf("%d", number_maker( 9, 9, 1 ) );
работает нормально. Вы можете сойти с 10 повторений только за n==1
.
printf("%d", number_maker( 1, 10, 1 ) );
По существу это работает для всех 9-значных результатов и (менее полезно) некоторых 10-значных результатов.
Использование целых чисел без знака увеличит число 10-значных результатов, которые могут быть представлены, но, возможно, это не особенно полезно.