Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2012, 18:24   #1
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию C++ палиндромы без массивов, без строк

Задание звучит так:
Найти все меньшие N числа-палиндромы, которые при возведении
в квадрат дают палиндром. Число называется палиндромом, если его за-
пись читается одинаково с начала и с конца.

Перво-наперво я не могу определить паоиндром. У меня программа неправильно работает. Я не понимаю почему. И второе - как понять все меньшие числа палиндромы? то есть в каком диапазоне??? И как их циклом for определять?
Код:
/*Найти все меньшие N числа-палиндромы, которые при возведении в квадрат дают палиндром. 
Число называется палиндромом, если его запись читается одинаково с начала и с конца*/

#include<iostream>
using namespace std;

int main()
{
	setlocale(0,"");
	int n, m = 0;
	cout << "Введите натуральное число:    " << endl;
    cin >> n;
	while(n!=0)     
    {
        m *= 10;   
        m += n%10;
        n = n/10;
    }	
	if(n==m)
		cout << "палиндром" << endl;
	else 
		cout << "обычное" << endl;
	system("pause");
	return 0;
}
Anya She вне форума Ответить с цитированием
Старый 20.12.2012, 18:45   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Код:
	while(n!=0)     
    {
        m *= 10;   
        m += n%10;
        n = n/10;
    }
в этом куске кода вы "разворачиваете" число N и записываете его "развернутым" в M, но при этом N уже не является изначальным... и после сравнения m == n оно естественно не при каких условиях не будет одинаково...
в задание наверняка имеется в виду диапазон от 1 до n , а на полиндромность проверять квадраты чисел из этого диапазона ( 1 в квадрате, 2 в квадрате... n в квадрате)
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 20.12.2012, 19:19   #3
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

вобщем я запуталась совершенно. Если я задаю ещё одну переменную, например, s, и присваиваю ей переменную n, то значение n уже никак не будет изменяться, и всё должно работать правильно, но проверка условия всё равно выполняется неправильно
Anya She вне форума Ответить с цитированием
Старый 20.12.2012, 20:00   #4
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Код:
#include "stdafx.h"
#include<iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	
	setlocale(0,"");
	
	cout << "Введите n: ";
	int n = 0;
	cin >> n;

	for (int i =0;i<n;i++)
	{
		int i2 = i*i;

		//проверка i2 (палиндром/не палиндром)
		//вывод на экран/запись
	}

	system("pause");
	return 0;
}
Lime вне форума Ответить с цитированием
Старый 20.12.2012, 20:36   #5
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

Спасибо большое. Вот вопрос ещё как число проверить... полиндром или нет???

Последний раз редактировалось Anya She; 20.12.2012 в 21:55.
Anya She вне форума Ответить с цитированием
Старый 20.12.2012, 22:22   #6
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

Как составить программу чтобы определить палиндром число или нет?
Anya She вне форума Ответить с цитированием
Старый 20.12.2012, 22:50   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
#include<iostream>
using namespace std;
 
int
isPalindrome(int n)
{
    int n0 = n, m = 0;
    while(n!=0)     
    {
        m *= 10;   
        m += n%10;
        n = n/10;
    }   
    return (m == n0);
}
 
int main(void)
{  
    setlocale(0,"");        
    cout << "Введите n: ";
    int n = 0;
    cin >> n;
    for (int i = 1; i < n; ++i) {
        if (isPalindrome(i) && isPalindrome(i * i)) {
            cout << i << " " << (i * i) << endl;
        }
    }
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 20.12.2012, 22:57   #8
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Anya She Посмотреть сообщение
Как составить программу чтобы определить палиндром число или нет?
части программы были в теме, остается их соеденить...
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;


bool isPal(int c)
{
	if (c % 10 == 0 && c >= 10) return false; //Числа заканчивающиеся на 0 не палиндромы
	if (c < 10 && c >=0) return true; //числа из одной цифры - палиндромы?

	int temp = c, rev_c = 0;
	
	while(temp != 0)     
    {
        rev_c *= 10;   
        rev_c += temp%10;
        temp = temp/10;
    }	

	//cout << c << " " << rev_c << endl;//для наглядности...
	return (c == rev_c);
}

int _tmain(int argc, _TCHAR* argv[])
{
	
	setlocale(0,"");
	cout << "Введите n: ";
	int n = 0;
	cin >> n;

	for (int i =0;i<n;i++)
	{
		int i2 = i*i;
		if  (isPal(i) && isPal(i2))
		{
			cout << i << "^2 = " << i2 << " - палиндром" << endl;
		}
	}

	system("pause");
	return 0;
}

Последний раз редактировалось Lime; 20.12.2012 в 23:00.
Lime вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение палиндрома без массивов Negent Общие вопросы C/C++ 7 09.12.2011 17:46
Работа с действительными числами без массивов foxy342 Помощь студентам 1 16.12.2010 11:17
утверждение Ферма без массивов [Паскаль] syrga Помощь студентам 1 05.12.2010 13:54
Транспонировать матрицу(Без исп. доп. массивов)) Doublefaced Помощь студентам 4 27.06.2009 13:03