Для начала..
Задача Nhex
Дано число Ch в системе исчисления с основанием m. Написать программу, которая переводит число в систему исчисления с основанкм 10.
Технические условия: Программа читает с клавиатуры в первой сторке число m (2≤m≤16), а следующей - текстовую строку, в которой записано число Ch (0≤Ch≤2+109) . Программа выводит на экран ответ в виде десятичного числа.
Пример:
Ввод:
16
FFFF
Вывод:
65535
Можно заюзать средства языка(если есть такие), но тогда будет в одну строчку. А так, попробуйте построить алгоритм для решения. Исходя из этой задачки, алгоритм для перекодированния числа с основанием m в десятичное число для всех одинаков, только изменяется число m. Жутко интересно...
Можно алгоритм и для "на оборот", т.е. из десятичного в другое представление..
Желательно на Си/Си++
Логические задачки (Пощекотать моск...)
Модератор: Модераторы разделов
-
Denjs
- Сообщения: 1685
- ОС: SuSe 10.2
Re: Логические задачки
не.. я не вредный.. но... ...
гм?Желательно на Си/Си++
Темы от студентов с запросами готовых решений по заданиям зарываются не глядя.
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Логические задачки
Код: Выделить всё
#include <iostream>
#include <string>
#include <algorithm>
class processor
{
public:
processor(int d) : d_(d), r_(0) {}
void operator()(int n)
{
if (n > d_) {
throw "invalid input";
}
r_ = r_ * d_ + n;
}
operator int() const
{
return r_;
}
private:
const int d_;
int r_;
};
template <class T>
class transformer_
{
public:
transformer_(T& dest) : dest_(dest) {}
void operator()(char c)
{
if (c >= '0' && c <= '9') {
dest_(c - '0');
} else if (c >= 'A' && c <= 'Z') {
dest_(c - 'A' + 10);
} else if (c >= 'a' && c <= 'z') {
dest_(c - 'a' + 10);
}
}
private:
T& dest_;
};
template <class T>
transformer_<T> transformer(T& d)
{
return transformer_<T>(d);
}
int main(int argc, char* argv[])
{
int d;
std::string s;
std::cin >> d >> s;
processor p(d);
std::for_each(s.begin(), s.end(), transformer(p));
std::cout << static_cast<int>(p) << std::endl;
return 0;
}