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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
#1

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

16.12.2013, 09:03. Просмотров 388. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 09:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задачка.Нужно найти ошибку (C++):

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

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

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

нужно найти ошибку. - C++
#include &lt;stdio.h&gt; void quickSortR(int* a, long N) { long i = 0, j = N; int temp, p; p = a;

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

Нужно найти ошибку!! - C++
Код программы прилагается помогите найти ошибку , Заранее очень благодарен!!

14
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 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;
}
0
MicM
822 / 480 / 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;
}
1
NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:25  [ТС] #4
MicM, Кажется чего-то не хватаетЗадачка.Нужно найти ошибку
Да и я просил указать мне на мои ошибки. Почему у меня выводит только один палиндром 11, а не все до 121 как на выше указанной прикрепленной картинке. Но в любом случае спасибо
0
NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:29  [ТС] #5
Ilot, Нет, это нельзя использовать. Однако спасибо за вашу помочь
0
MicM
822 / 480 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
16.12.2013, 10:32 #6
Цитата Сообщение от NikiKoyot Посмотреть сообщение
MicM, Кажется чего-то не хватает
вы про что?
0
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.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
16.12.2013, 10:42 #8
Цитата Сообщение от NikiKoyot Посмотреть сообщение
Ilot, Нет, это нельзя использовать. Однако спасибо за вашу помочь
А в чем проблема? Если вам нужно число то преобразовать его в строку и наоборот проще простого. А еще лучше создать свой класс с перегруженными операциями +, - и прочие (см. Лафоре).
0
NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 10:47  [ТС] #9
Ilot, По условию задачи нельзя ничего использовать кроме циклов и условных операций.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
16.12.2013, 10:54 #10
На самом то деле никто не мешает вам использовать для хранения числа массив. Алгоритм от этого ничуть не изменится.
0
MicM
822 / 480 / 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 вводится с клавиатуры), которые при возведение в квадрат также дает палиндром.(Без массивов и функций)
Её я и написал
0
NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
16.12.2013, 11:13  [ТС] #12
Ilot, Проблема в том, что массивы мы еще не изучали и по этой причине я не могу больше ничего кроме циклов и условий использовать.

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

Нужно найти ошибку - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; double a,b,c,d,v; a=1000; b=1; v=a+b; ...

Нужно найти ошибку - C++
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; ...

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

Нужно найти и исправить ошибку - C++
Есть программа, работает, но все время выдает одни и те же числа. Помогите найти где там ошибка /* Записать каждый второй элемент...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru