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

Задача по программированию(неудачный перевод кода) - C++

Восстановить пароль Регистрация
 
ShiftDj
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36
01.11.2013, 16:00     Задача по программированию(неудачный перевод кода) #1
Во время экперимента Накодиллы было случайно получено сообщение инопланетян, содержащее формулу вида A + B = C.

Общественности стало интересно, какую же систему счисления используют инопланетяне. Так как внеземная цивилизация была достаточно развита, чтобы отправить межпланетное сообщение, Накодилла предположил, что основание системы счисления довольно мало. Требуется написать программу, которая находит минимальное основание системы счисления, при котором данное равенство выполняется.

Формат входного файла

В единственной строке входных данных содержится равенство вида A + B = C. Строка не содержит пробелы, числа состоят из цифр от 0 до 9 и заглавных латинских букв от А до Z

Формат выходного файла

Требуется вывести единственное число – искомое основание системы счисления. Если такой системы счисления не существует, то вывести -1. Гарантируется, что ответ не превышает 36.

Пример:

Ввод:
2+2=4
Вывод:
5

К этой задаче я нашел код на алгоритмическом языке(КуМир) и попытался перевести на C++
Вот ссылка: http://gym1544.ru/EGE_GIA/dz211013.pdf
Оригинал:
Кликните здесь для просмотра всего текста

использовать Строки
лит A,B,C,Ф,стр
цел Ы,i,чис1,чис2,чис3,начсс,макс
лог усп
алг
нач
ввод A,B,C
стр:=A+B+C
макс:=0
нц для i от 1 до длин(стр)
если код(стр[i])>макс
то макс:=код(стр[i])
все
кц
Ф:=символ(макс)
начсс:=перевод1(Ф)+1
нц для i от начсс до 36
если найти(цел_в_лит(i),A)=-1
то
если длин(A)>1
то чис1:=перевод2(A,i)
иначе чис1:=перевод1(A)
все
если длин(B)>1
то чис2:=перевод2(B,i)
иначе чис2:=перевод1(B)
все
если длин(C)>1
то чис3:=перевод2(C,i)
иначе чис3:=перевод1(C)
все
если чис3=чис1+чис2
то вывод i; выход
все
все
кц
кон

{функция перевод2}
алг цел перевод2(арг лит стр,цел осн)
нач
лог усп, цел i, циф1, циф2
если стр[1]>="0" и стр[1]<="9"
то
циф1:=лит_в_цел(стр[1],усп)
иначе
циф1:=код(стр[1])-55
все
если стр[2]>="0" и стр[2]<="9"
то
циф2:=лит_в_цел(стр[2],усп)
иначе
циф2:=код(стр[2])-55
все
знач:=циф1*осн+циф2
кон

{функция перевод1}
алг цел перевод1(арг лит стр)
нач
лог усп, цел циф1
если стр[1]>="0" и стр[1]<="9"
то
циф1:=лит_в_цел(стр[1],усп)
иначе
циф1:=код(стр[1])-55
все
знач:=циф1
кон


"Мое" творчество:
Кликните здесь для просмотра всего текста
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <string>
 
using namespace std;
 
int searchchar(char a, string b)
{
    for(int i=0; i<b.length(); ++i)
    {
        if (b[i]==a)
        {
            return i;
            break;
        }
    }
};
 
string slovo(string a, int b, int c)
{
    string d;
    for (int i=b; i<c; ++i)
    {
        d+=a[i];
    }
    return d;
};
 
int perevod1(string a)
{
    int num;
    if (((int)a[0]>=48)&&((int)a[0]<=57))
    {
        num=atoi(&a[0]);
    }
    else
    {
        num=(int)a[0]-55;
    }
    return num;
};
 
int perevod2(string str, int bas)
{
    int num_1, num_2;
    if (((int)str[0]>=48)&&((int)str[0]<=57))
    {
        num_1=atoi(&str[0]);
    }
    else
    {
        num_1=(int)str[0]-55;
    }
    if (((int)str[1]>=48)&&((int)str[1]<=57))
    {
        num_2=atoi(&str[1]);
    }
    else
    {
        num_2=(int)str[1]-55;
    }
    return num_1*bas+num_2;
};
 
 
int main()
{
    string A, B, C, str1, str, F;
    char c;
    int a1, a2, a3, bi, num1, num2, num3, start, maxnum;
    bool can;
    cin >> str1;
    a1=searchchar('+', str1);
    a2=searchchar('=', str1);
    A=slovo(str1, 1, a1);
    B=slovo(str1, a1+1, a2);
    C=slovo(str1, a2+1, str1.length());
    str=A+B+C;
    maxnum=0;
    for(int i=1; i<str.length(); ++i)
    {
        if ((i+'0')>maxnum)
        {
            maxnum=(i+'0');
        }
    }
    F=(char)maxnum;
    start=perevod1(F)+1;
    for (int i=start; i<36; ++i)
    {
        if(A.length()>1)
        {
            num1=perevod2(A, i);
        }
        else
        {
            num1=perevod1(A);
        }
        if(B.length()>1)
        {
            num2=perevod2(B, i);
        }
        else
        {
            num2=perevod1(B);
        }
        if(C.length()>1)
        {
            num3=perevod2(C, i);
        }
        else
        {
            num3=perevod1(C);
        }
        if (num3==(num1+num2))
        {
            cout << i;
            break;
        }
    }
    return 0;
}

Но этот код не компилируется... помогите, пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2013, 16:00     Задача по программированию(неудачный перевод кода)
Посмотрите здесь:

C++ Задача по программированию
Задача по программированию C++
Олимпиадная задача по программированию C++
C++ не решается задача по параллельному программированию
C++ Задача по программированию. Цикл For
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
01.11.2013, 16:03     Задача по программированию(неудачный перевод кода) #2
ShiftDj, а какие ошибки выводит? Скопируйте
ShiftDj
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36
01.11.2013, 16:29  [ТС]     Задача по программированию(неудачный перевод кода) #3
Извиняюсь, не правильно выразился: код компилируется, но после ввода всегда выходит ошибка:
Миниатюры
Задача по программированию(неудачный перевод кода)  
ShiftDj
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36
01.11.2013, 23:56  [ТС]     Задача по программированию(неудачный перевод кода) #4
Не судите название строго просто надо было быстро скомпилировать код, вот так и назвал

Добавлено через 7 часов 26 минут
По сути, я решил... Но все равно программа проходит лишь 5 тестов из 8, уж не знаю почему...
Кликните здесь для просмотра всего текста
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <string>
using namespace std;
 
int searchchar(char a, string b)
{
    int c=0;
    for(int i=0; i<b.length(); ++i)
    {
        if (b[i]==a)
        {
            c=i;
        }
    }
    return c;
};
 
string slovo(string a, int b, int c)
{
    string d;
    for (int i=b; i<c; ++i)
    {
        d+=a[i];
    }
    return d;
};
 
int perevod1(string a)
{
    int num;
    if (((int)a[0]>=48)&&((int)a[0]<=57))
    {
        num=(int)a[0]-48;
    }
    else
    {
        num=(int)a[0]-55;
    }
    return num;
};
 
int perevod2(string str, int bas)
{
    int num_1, num_2;
    if (((int)str[0]>=48)&&((int)str[0]<=57))
    {
        num_1=(int)str[0]-48;
    }
    else
    {
        num_1=(int)str[0]-55;
    }
    if (((int)str[1]>=48)&&((int)str[1]<=57))
    {
        num_2=(int)str[1]-48;
    }
    else
    {
        num_2=(int)str[1]-55;
    }
    return num_1*bas+num_2;
};
 
int perevod3(char a)
{
    int num;
    if (((int)a>=48)&&((int)a<=57))
    {
        num=atoi(&a);
    }
    else
    {
        num=(int)a-55;
    }
    return num;
};
 
 
int main()
{
    string A, B, C, str1, str;
    char c, F;
    int a1, a2, bi, num1, num2, num3, start, maxnum;
    cin >> str1;
    a1=searchchar('+', str1);
    a2=searchchar('=', str1);
    A=slovo(str1, 0, a1);
    B=slovo(str1, a1+1, a2);
    C=slovo(str1, a2+1, str1.length());
    str=A+B+C;
    maxnum=0;
    for(int i=1; i<str.length(); ++i)
    {
        if ((str[i])>maxnum)
        {
            maxnum=(str[i]);
        }
    }
    F=maxnum;
    start=perevod3(F)+1;
    for (int i=start; i<36; ++i)
    {
        if(A.length()>1)
        {
            num1=perevod2(A, i);
        }
        else
        {
            num1=perevod1(A);
        }
        if(B.length()>1)
        {
            num2=perevod2(B, i);
        }
        else
        {
            num2=perevod1(B);
        }
        if(C.length()>1)
        {
            num3=perevod2(C, i);
        }
        else
        {
            num3=perevod1(C);
        }
        if (num3==(num1+num2))
        {
            cout << i;
            break;
        }
    }
    if (num3!=(num1+num2))
    {
        cout << -1;
    }
    return 0;
}
Хулиган
02.11.2013, 00:05     Задача по программированию(неудачный перевод кода)
  #5

Не по теме:

возможно здесь замешаны инопланетяне!?

Yandex
Объявления
02.11.2013, 00:05     Задача по программированию(неудачный перевод кода)
Ответ Создать тему
Опции темы

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