Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 09:03     Задачка.Нужно найти ошибку #1
Изначальное условие задачи:
Составить программу поисков всех чисел палиндромов до 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;
}
Вот что оно мне отвечает:Задачка.Нужно найти ошибку
Где я ошибся? Помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 09:03     Задачка.Нужно найти ошибку
Посмотрите здесь:

Нужно найти ошибку C++
C++ Простая задачка, но туплю, помогите найти ошибку с new.
Нужно найти ошибку C++
C++ Нужно найти ошибку
C++ Нужно найти ошибку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.12.2013, 09:27     Задачка.Нужно найти ошибку #2
Может быть не совсем то, что вы хотите однако я бы рекомендовал вам использовать для хранения информации строку, а не число.
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;
}
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
16.12.2013, 10:08     Задачка.Нужно найти ошибку #3
У меня вот что получилось, без использования функций и строк
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;
}
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:25  [ТС]     Задачка.Нужно найти ошибку #4
MicM, Кажется чего-то не хватаетЗадачка.Нужно найти ошибку
Да и я просил указать мне на мои ошибки. Почему у меня выводит только один палиндром 11, а не все до 121 как на выше указанной прикрепленной картинке. Но в любом случае спасибо
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:29  [ТС]     Задачка.Нужно найти ошибку #5
Ilot, Нет, это нельзя использовать. Однако спасибо за вашу помочь
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
16.12.2013, 10:32     Задачка.Нужно найти ошибку #6
Цитата Сообщение от NikiKoyot Посмотреть сообщение
MicM, Кажется чего-то не хватает
вы про что?
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:40  [ТС]     Задачка.Нужно найти ошибку #7
MicM,единственное число палиндром до 121, которое в преобразовании её в квадрат дает тоже палиндром, это 11->121, но если говорить о всех числах палиндромах до 121, то не хватает 33, 44,55,66,88,99.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.12.2013, 10:42     Задачка.Нужно найти ошибку #8
Цитата Сообщение от NikiKoyot Посмотреть сообщение
Ilot, Нет, это нельзя использовать. Однако спасибо за вашу помочь
А в чем проблема? Если вам нужно число то преобразовать его в строку и наоборот проще простого. А еще лучше создать свой класс с перегруженными операциями +, - и прочие (см. Лафоре).
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:47  [ТС]     Задачка.Нужно найти ошибку #9
Ilot, По условию задачи нельзя ничего использовать кроме циклов и условных операций.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
16.12.2013, 10:54     Задачка.Нужно найти ошибку #10
На самом то деле никто не мешает вам использовать для хранения числа массив. Алгоритм от этого ничуть не изменится.
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
16.12.2013, 10:57     Задачка.Нужно найти ошибку #11
Цитата Сообщение от 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 вводится с клавиатуры), которые при возведение в квадрат также дает палиндром.(Без массивов и функций)
Её я и написал
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 11:13  [ТС]     Задачка.Нужно найти ошибку #12
Ilot, Проблема в том, что массивы мы еще не изучали и по этой причине я не могу больше ничего кроме циклов и условий использовать.

Добавлено через 13 минут
MicM, Ой, извините, что-то я тупанул.Подумал, что нужно было уже палиндром в квадрате выводить.
Но все таки, не подскажите в чем моя(в моем коде) ошибка?(В моем коде искало только числа палиндромы до n)
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
16.12.2013, 11:21     Задачка.Нужно найти ошибку #13
Надо каждый раз переменную p обнулять, иначе в p будут записываться значения поверх старых
После цикла while добавьте: p = 0;
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 11:25  [ТС]     Задачка.Нужно найти ошибку #14
Цитата Сообщение от MicM Посмотреть сообщение
Надо каждый раз переменную p обнулять, иначе в p будут записываться значения поверх старых
После цикла while добавьте: p = 0;
Огромное спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2013, 11:43     Задачка.Нужно найти ошибку
Еще ссылки по теме:

C++ Нужно найти ошибку
Найти ошибку и задачка C++

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

Или воспользуйтесь поиском по форуму:
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 11:43  [ТС]     Задачка.Нужно найти ошибку #15
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;
Yandex
Объявления
16.12.2013, 11:43     Задачка.Нужно найти ошибку
Ответ Создать тему
Опции темы

Текущее время: 23:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru