Консультация № 181898
16.01.2011, 17:24
55.00 руб.
0 3 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:


Задача на циклы WHILE, REPEAT
Написать консольное приложение C++

Текст задачи:
Рассмотрим некоторое натуральное число n. Если это- не палиндром, то изменим порядок его цифр на обратный и сложим исходное число с получившимся. Если сумма- не палиндром, то над ним повторяется те же действия и т.д., пока не получится палиндром. До настоящего времени неизвестно, завершается ли этот процесс для любого натурального числа n. Даны натуральные числа n,m. Проверить, верно ли, что для n процесс завершается не позднее, чем после m таких действий.

Обсуждение

Неизвестный
16.01.2011, 17:44
общий
это ответ
Здравствуйте, Denis Loran!
Программа. C++. Компилировал GCC.
Код:
/* 
* File: main.cpp
* Author: Micren
*
* Created on 16 Январь 2011 г., 16:29
*/

#include <iostream>
#include <iomanip>
#include <locale>
#include <limits>

using namespace std;

typedef unsigned int uint;

// Используется для ввода данных

template<class T>
T input(const char* const msg)
{
T res = 0;
while (true)
{
cout << msg;
cin >> res;
if (cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Ошибка ввода." << endl;
}
else
{
return res;
}
}
}

// Меняет порядок цифр на обратный

uint reverse(uint value)
{
uint result = 0;
while (value)
{
result = result * 10 + value % 10;
value /= 10;
}
return result;
}

// Проверяет является ли число палиндромом

bool isPalindrom(uint value)
{
return value == reverse(value);
}

/*
*
*/
int main()
{
locale::global(locale(""));

uint n = input<uint > ("Введите n:"), m = input<uint > ("Введите m:");

bool flag;
while (!(flag = isPalindrom(n)) && m--)
{
n += reverse(n);
}

cout << "Верно ли, что число стало палиндромом(" << n << "):" << boolalpha << flag << endl;

system("pause");

return 0;
}

Пример работы:
Код:
Введите n:239
Введите m:1
Верно ли, что число стало палиндромом(1171):false

Введите n:239
Введите m:10
Верно ли, что число стало палиндромом(2882):true
5
Отличный ответ
Неизвестный
17.01.2011, 15:42
общий
Есть ли вариант без выделения пространства имен и темплатов?
Неизвестный
17.01.2011, 16:09
общий
Спасибо, удалось переделать своими силами.
Форма ответа