Тема: Функції перетворення чисел в різних системах числення
Написати програму яка буде виконувати перетворення чисел з різних систем числення ( двійкової, вісімкової, шістнадцяткової) С++. Допоможіть будь ласка
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Функції перетворення чисел в різних системах числення
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Написати програму яка буде виконувати перетворення чисел з різних систем числення ( двійкової, вісімкової, шістнадцяткової) С++. Допоможіть будь ласка
Можна, наприклад, якось так:
#include <iostream>
#include <string>
#include <cctype>
int conv_digit(char digit) {
if (std::isalpha(digit)) {
return std::toupper(digit) - 'A' + 10;
} else if (std::isdigit(digit)) {
return digit - '0';
}
return -1;
}
int main() {
int base;
std::string numstr;
std::cout << "Введіть основу системи числення (2, 8, 16, тощо):\n";
std::cin >> base;
std::cout << "Введіть число у вказаній системі числення:\n";
std::cin >> numstr;
int abs_result = 0;
int sign = 1;
bool number_started = false;
std::string::iterator it;
for (it = numstr.begin(); it != numstr.end(); it++) {
if (std::isspace(*it)) continue;
if ((*it == '-') && number_started) {
std::cout << "Мінус не на початку числа!\n";
return -1;
}
if (*it == '-') {
sign = -1;
number_started = true;
continue;
}
int digit = conv_digit(*it);
if (digit < 0 || digit >= base) {
std::cout << "Неправильна цифра: " << *it << "\n";
return -1;
}
abs_result = abs_result * base + digit;
number_started = true;
}
int result = sign * abs_result;
std::cout << "Результат: " << result << "\n";
return 0;
}
Я не використовую C++ професійно, тому код може бути неідеальний (хай поправлять ті, хто знає C++ краще за мене). Але він принаймні працює.
Якщо треба щось пояснити в цьому коді, кажіть.
Ітератор використовуєте, могли просто через foreach.
for(auto& it : numstr)
і прибрати вказівники
Ітератор використовуєте, могли просто через foreach.
for(auto& it : numstr)
і прибрати вказівники
Щиро дякую! Буду знати про foreach
#include <iostream>
#include <string>
#include <cctype>
int conv_digit(char digit) {
if (std::isalpha(digit)) {
return std::toupper(digit) - 'A' + 10;
} else if (std::isdigit(digit)) {
return digit - '0';
}
return -1;
}
int main() {
int base;
std::string numstr;
std::cout << "Введіть основу системи числення (2, 8, 16, тощо):\n";
std::cin >> base;
std::cout << "Введіть число у вказаній системі числення:\n";
std::cin >> numstr;
int abs_result = 0;
int sign = 1;
bool number_started = false;
for (auto &it : numstr) {
if (std::isspace(it)) continue;
if ((it == '-') && number_started) {
std::cout << "Мінус не на початку числа!\n";
return -1;
}
if (it == '-') {
sign = -1;
number_started = true;
continue;
}
int digit = conv_digit(it);
if (digit < 0 || digit >= base) {
std::cout << "Неправильна цифра: " << it << "\n";
return -1;
}
abs_result = abs_result * base + digit;
number_started = true;
}
int result = sign * abs_result;
std::cout << "Результат: " << result << "\n";
return 0;
}
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися