-4

Имеется следующий код для перевода чисел из десятичной системы счисления на другие (2-10) на Python:

num = int(input())
notation = int(input())
result = int(input())

while num > 0: result += str(num % notation) num //= notation

print(result)

Попробовал сделать его на C++. Само собой ничего не вышло в связи с неопытностью:

#include <iostream>

int main() { int num, notation; char result; std::cin >> num; std::cin >> notation;

while (num > 0) { result = result + char(num % notation); num = num / notation; } std::cout << r << std::endl; }

Выдает следующие ошибки:

Ошибка при запуске

Код был написан Python'истом, поэтому мог взять какие-либо вещи из Python.

И, если не сложно, не могли бы вы оставить какие-либо ресурсы для изучения C++?

insolor
  • 49,104
emokid
  • 13

1 Answers1

0

В представленном коде есть несколько проблем:

  • Вероятно, вы хотели использовать переменную result, но в цикле вы обращаетесь к переменной r. Необходимо заменить r на result в выражении std::cout << r << std::endl;.

  • Вы пытаетесь присвоить символ числу, используя result = result + char(num % notation);. Это неверное использование символа. Для получения символа из числа, вам нужно преобразовать его с помощью таблицы символов ASCII или использовать функцию std::to_string() для преобразования числа в строку.

Вот исправленный код:

#include <iostream>
#include <string>

int main() { int num, notation; std::string result; std::cin >> num; std::cin >> notation;

while (num > 0) { char digit = '0' + (num % notation); result = digit + result; num = num / notation; } std::cout << result << std::endl; }

В этом исправленном коде используется переменная result типа std::string для хранения результата в виде строки. В цикле мы получаем остаток от деления и преобразуем его в символ, затем добавляем этот символ в начало строки result. В конце выводим полученный результат.

wchistow
  • 3,697
  • 6
  • 13
  • 32
  • Спасибо, работает. Но хотелось бы спросить как работает следующая строка: char digit = '0' + (num % notation); Видимо, char принимает только 1 символ, но в данной строке происходит конкатенация 0 с полученным выражением. Хотя к result добавляется, как и нужно 1 символ за 1 стадию цикла. – emokid May 09 '23 at 23:35
  • @emokid "но в данной строке происходит конкатенация 0 с полученным выражением" - не конкатенация, а сложение кода символа '0' с остатком от деления num на notation. В итоге в зависимости от значения второго слагаемого получится символ от '0' до '9' (или дальше в таблице ascii, если значение второго слагаемого больше 9) – insolor May 10 '23 at 05:57