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

Найти ошибку в решении "Числа - палиндрома" (задача с acmp) - C++

Восстановить пароль Регистрация
 
nuts23
0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 30
28.07.2013, 21:32     Найти ошибку в решении "Числа - палиндрома" (задача с acmp) #1
Число - палиндром
(Время: 1 сек. Память: 16 Мб Сложность: 29%)

Напомним, что палиндромом называется строка, одинаково читающаяся с обеих сторон. Например, строка «ABBA» является палиндромом, а строка «ABC» - нет.

Необходимо определить, в каких системах счисления с основанием от 2 до 36 представление заданного числа N является палиндромом.

В системах счисления с основанием большим 10 в качестве цифр используются буквы латинского алфавита: A, B, ... , Z. Например, A11 = 1010, Z36 = 3510.
Входные данные

Входной файл INPUT.TXT содержит заданное число N в десятичной системе счисления (1 <= N <= 109).
Выходные данные

Если соответствующее основание системы счисления определяется единственным образом, то выведите в первой строке выходного файла OUTPUT.TXT слово «unique», если оно не единственно — выведите в первой строке выходного файла слово «multiple». Если же такого основания системы счисления не существует — выведите в первой строке выходного файла слово «none».

В случае существования хотя бы одного требуемого основания системы счисления выведите через пробел в возрастающем порядке во второй строке выходного файла все основания системы счисления, удовлетворяющие требованиям.
У меня WA на 4-ом тесте.
C++ (Qt)
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
66
67
68
#include <stdio.h>
#include <stdio.h>
#include <math.h>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
int per_check(long long n, int b)
{
    int A[50];
    for (int i = 0; i < 50; ++i)
        A[i] = 0;
    int i;
    i = 0;
    int NA;
    NA = 0;
    while (n>0)
    {
        NA = i;
        A[i] = n%b;
        n/=b;
        ++i;
    }
    int j = 0;
    int z = 0;
    while (A[j] == A[NA-j] && j<=i/2)
    {
        ++z;
        ++j;
        if (z == i/2)
            return 1;
    }
    return 0;
}
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    long long N;
    scanf("%I64d", &N);
    int k = 0;
    int A[36];
    for (int i = 0; i < 36; ++i)
        A[i] = 0;
    int j = 0;
    for (int i = 2; i <=36; ++i)
    {
        if (per_check(N, i))
        {
            ++k;
            A[j] = i;
            ++j;
        }
    }
    if (k == 0)
        printf("none");
    else if (k == 1)
    {
        printf("unique\n");
        printf("%d", A[0]);
    }
    else
    {
        printf("multiple\n");
        for (int i = 0; i < j; ++i)
            printf("%d ", A[i]);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2013, 21:32     Найти ошибку в решении "Числа - палиндрома" (задача с acmp)
Посмотрите здесь:

Дано натуральное число. Найти сумму последних "n" цифр "n" числа, не применяя переменых значений C++
Помогите найти ошибку в программе составления палиндрома числа C++
Исправить ошибку в строках "case 3:zadacha(Uch,Pr,Ocen);break;" и " return 0;" C++
Найти ошибку в решении задачи "Шифровка" (acmp) C++
C++ Компилятор выдает ошибку: error C2041: недопустимая цифра "8" для основания "8"
Не могу понять ошибку "C2043: недопустимый break". Задача: найти подстроку в строке C++
Патерн "прототип" не работает, выдаёт ошибку "недопустимый вызов нестатической ф-ции", где я в коде ошибка? C++
C++ Задача из Златопольского: "Найти числа с известным количеством делителей". Не могу найти ошибку

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.07.2013, 21:51     Найти ошибку в решении "Числа - палиндрома" (задача с acmp) #2
зачем так мудрить, все же просто. проверка числа a на симметричность в системе счисления с основанием q:
C++
1
2
3
4
5
6
7
8
9
int check(int a, int q)
{
    int b = 0, c = a;
    do{
        b = b * q + c % q;
        c /= q;
    }while(c);
    return a == b;
}
Yandex
Объявления
28.07.2013, 21:51     Найти ошибку в решении "Числа - палиндрома" (задача с acmp)
Ответ Создать тему
Опции темы

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