С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34

Задачка.Нужно найти ошибку

16.12.2013, 09:03. Показов 761. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изначальное условие задачи:
Составить программу поисков всех чисел палиндромов до n(n вводится с клавиатуры), которые при возведение в квадрат также дает палиндром.(Без массивов и функций)
Я решил сделать пока только поиск палиндромов и вывод их.
Вот что у меня получилось:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    unsigned long int n, p = 0, o, v, i = 10;
    cout << "Введите число" << endl;
    cin >> n;
    for ( ;i <= n;i++){
        o = i;
        v = i;
        while (o > 0){
            p = p * 10 + o % 10;
            o = o / 10;
            if (v == p)
            {
                cout << i << endl;
            }
        }
    }
 
    return 0;
}
Вот что оно мне отвечает:
Где я ошибся? Помогите пожалуйста
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2013, 09:03
Ответы с готовыми решениями:

Найти ошибку и задачка
Добрый день, есть задачки, связанные с С++ Требуется удостовериться в их правильном решении. 1. Найдите ошибки в фрагменте кода....

Простая задачка, но туплю, помогите найти ошибку с new.
Написано в C++ Builder 6, для решения конкретного уравнения. Вводить число 0.3. Выдаёт ошибку в строке: float *temp=new float; //Тут...

Нужно найти ошибку
Вот код программы: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; int main(void) { ...

14
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
16.12.2013, 09:27
Может быть не совсем то, что вы хотите однако я бы рекомендовал вам использовать для хранения информации строку, а не число.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include<string>
using namespace std;
bool IsPolidrom(string);
int main()
{
    string number;
    cin >> number;
 
    std::cout << IsPolidrom(number) << std::endl;
 
    return 0;
}
bool IsPolidrom(string str)
{
    std::string::iterator beg = str.begin();
    std::string::iterator end = str.end() - 1;
    do {
        if (*beg != *end)
            return false;
    }
    while(++beg < --end);
    return true;
}
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
16.12.2013, 10:08
У меня вот что получилось, без использования функций и строк
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
 
int main()
{
    unsigned int n,tmp;
    std::cout <<"N = ";
    std::cin >> n;
    unsigned int c,k,l;
    bool f1,f2;
    for (unsigned int i=1; i<=n; i++)
    {
        c = 0;
        tmp = i;
        while (tmp!=0)
        {
            ++c;
            tmp/=10;
        }
        f1 = true;
        k = 1;
        l = 1;
        for (int j=1; j<c; j++)
            k*=10;
        for (int j=1; j<=c/2; j++)
        {
            if ((i/k)%10!=(i/l)%10)
            {
                f1 = false;
                break;
            }
            k/=10;
            l*=10;
        }
        if (f1)
        {
            tmp=i*i;
            c = 0;
            while (tmp!=0)
            {
                ++c;
                tmp/=10;
            }
            f2 = true;
            k = 1;
            l = 1;
            for (int j=1; j<c; j++)
                k*=10;
            tmp=i*i;
            for (int j=1; j<=c/2; j++)
            {
                if ((tmp/k)%10!=(tmp/l)%10)
                {
                    f2 = false;
                    break;
                }
                k/=10;
                l*=10;
            }
            if (f2)
                std::cout <<i <<' ';
        }
    }
    std::cout <<std::endl;
    return 0;
}
1
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:25  [ТС]
MicM, Кажется чего-то не хватает
Да и я просил указать мне на мои ошибки. Почему у меня выводит только один палиндром 11, а не все до 121 как на выше указанной прикрепленной картинке. Но в любом случае спасибо
0
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:29  [ТС]
Ilot, Нет, это нельзя использовать. Однако спасибо за вашу помочь
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
16.12.2013, 10:32
Цитата Сообщение от NikiKoyot Посмотреть сообщение
MicM, Кажется чего-то не хватает
вы про что?
0
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:40  [ТС]
MicM,единственное число палиндром до 121, которое в преобразовании её в квадрат дает тоже палиндром, это 11->121, но если говорить о всех числах палиндромах до 121, то не хватает 33, 44,55,66,88,99.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
16.12.2013, 10:42
Цитата Сообщение от NikiKoyot Посмотреть сообщение
Ilot, Нет, это нельзя использовать. Однако спасибо за вашу помочь
А в чем проблема? Если вам нужно число то преобразовать его в строку и наоборот проще простого. А еще лучше создать свой класс с перегруженными операциями +, - и прочие (см. Лафоре).
0
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:47  [ТС]
Ilot, По условию задачи нельзя ничего использовать кроме циклов и условных операций.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
16.12.2013, 10:54
На самом то деле никто не мешает вам использовать для хранения числа массив. Алгоритм от этого ничуть не изменится.
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
16.12.2013, 10:57
Цитата Сообщение от NikiKoyot Посмотреть сообщение
MicM,единственное число палиндром до 121, которое в преобразовании её в квадрат дает тоже палиндром, это 11->121
1^2=1
2^2=4
3^2=9
22^2=484
101^2=10201
111^2=12321
121^2=14641
Как видишь - палиндромы.
Цитата Сообщение от NikiKoyot Посмотреть сообщение
Составить программу поисков всех чисел палиндромов до n(n вводится с клавиатуры), которые при возведение в квадрат также дает палиндром.(Без массивов и функций)
Её я и написал
0
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 11:13  [ТС]
Ilot, Проблема в том, что массивы мы еще не изучали и по этой причине я не могу больше ничего кроме циклов и условий использовать.

Добавлено через 13 минут
MicM, Ой, извините, что-то я тупанул.Подумал, что нужно было уже палиндром в квадрате выводить.
Но все таки, не подскажите в чем моя(в моем коде) ошибка?(В моем коде искало только числа палиндромы до n)
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
16.12.2013, 11:21
Надо каждый раз переменную p обнулять, иначе в p будут записываться значения поверх старых
После цикла while добавьте: p = 0;
1
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 11:25  [ТС]
Цитата Сообщение от MicM Посмотреть сообщение
Надо каждый раз переменную p обнулять, иначе в p будут записываться значения поверх старых
После цикла while добавьте: p = 0;
Огромное спасибо!
0
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 11:43  [ТС]
MicM, вот моя версия кода:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    unsigned long int n, p = 0, o, v, i = 1,m,l;
    cout << "Введите число" << endl;
    cin >> n;
    for ( ;i <= n;i++){
        o = i;
        v = i;
        while (o > 0){
            p = p * 10 + o % 10;
            o = o / 10;
            if (v == p)
            {   
                p = 0;
                m = i*i;
                o = m;
                            
                while (o > 0)
                {
                    p = p * 10 + o % 10;
                    o = o / 10;
                    if (m == p){ cout << i << endl; }
                }
                    
                }
            }
        p = 0;
        }
        
 
    return 0;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2013, 11:43
Помогаю со студенческими работами здесь

Нужно найти ошибку {
#include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int a, p; int S, Sr, n; p =...

Нужно найти ошибку
Мой код #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double ugol(int a, int n, double s) { s = (n*a*a) / (4 *...

Нужно найти ошибку
10 строка: #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;cstdlib&gt; const double PI=22/7; void main () { double r,s,l; ...

нужно найти ошибку
надо создать динамический массив, в который записываются элементы массива х, которые строго больше 2х своих соседей. у меня в программе...

Нужно найти ошибку
Помогите найти ошибку, не запускается( Тексты программ переписывайте в сообщение!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru