@Anvario0

Почему программа зацикливается?

Задание: Некоторое натуральное число заканчивается на двойку. Если ее переставить на первое место, то число удвоится. Какое минимальное число было изначально?
Мой код:
#include <stdio.h>
#include <math.h>

int main() {
	int a = 12;
	int proverka = 0;
	while (1)
	{
		if (a % 10 == 2) {
			int r = a; //Сохраняем начально значение a
			int x = a;
			int count = 0;
			while (x > 0) {
				x /= 10;
				count += 1;  //Считаем, сколько у числа разрядов
			}
			a /= 10;
			a = a + 2 * pow(10, (count - 1));
			if (2 * r == a) {
				printf("r = %d\n", r);
				printf("a = %d\n\n", a);
				proverka = 1;
			}
			a = r;
		}
		a += 10;

		if (proverka == 1) {
			break;
		}
	}
}


В чём ошибка?
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 3
@galaxy
Подсказка: число немаленькое.

spoiler

Пусть искомое числоa = 10*x + 2
Тогда 2*10^n+x = 2(10*x+2) (переставили 2 в начало, n - число цифр в x)
Т.е. 2*10^n-4 = 19*x - нужно найти n, чтобы 2*10^n-4 делилось на 19.
Напишите такую программу

Ответ написан
@redcircle
Ответ 105263157894736842
Неудивительно, что программа виснет.

Правильный поиск такой:

long long q = 20;
while ((q-4) % 19) q *= 10;
long long answer = ((q-4)/19) * 10 + 2;
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
Потому что while (1) - это бесконечный цикл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы