Не работает программа перевода систем счисления - C (СИ)
Формулировка задачи:
Неполучается написать перевод из 10й системы в 16ную. Допустим 13(10) в 16ной системе показывает как 3(?) а не как 13(16). И помогите добавить к числу букву ???
Заранее спасибо.
int TranslateNum (int userNum ,int notation)
{
int rest = 0 , tempAmount = 0 , count = 0 , amount = 0;
while (userNum != 0)
{
rest = userNum % notation ;
userNum = userNum / notation ;
tempAmount = tempAmount * 10 + rest ;
count ++ ;
}
while (count != 0)
{
amount = amount * 10 + tempAmount % 10;
tempAmount /= 10;
count -- ;
}
return amount ;
}
void main ()
{
SetConsoleOutputCP(1251);
cout << "УСЛОВИЕ: Написать функцию, которая получает в качестве "
<< " аргументов целое \nположительное число и систему счисления,"
<< "в которую это число должно переводится \n(системы счисления от 2 до 36)."
<< " Например, при переводе числа 27 в \nсистему счисления 16 должно"
<< " получиться 1B; 13 в 5-ю - 23; 35 в 18-ю - 1H.\n\n\t\t\tРЕШЕНИЕ" << endl ;
int c = 0 , userNum , notation ;
cout << "Введите число для перевода -> " ; cin >> userNum ;
cout << "Введите систему счисления в которую требуется перевести Ваше число -> " ; cin >> notation ;
c = TranslateNum (userNum , notation) ;
cout << "Результат перевода: " << c << endl ;
}Решение задачи: «Не работает программа перевода систем счисления»
textual
Листинг программы
#include<iostream>
using namespace std;
void main()
{
int ss,k1=10,k2=11,t,num1,i;
double num;
char ms[20]={' ',' ', ' ',' ',' ', ' ',' ',' ', ' ',' ',' ', ' ',};
char znak='+';
cout<<"vvedite isxodnoe chislo\n";
cin>>num;
if (num<0) {znak='-';num*=-1;}
cout<<"vvedite novoe osnovanie\n";
cin>>ss;
cout<<"vvedite tochnost\n";
cin>>t;
num1=num;
num=num-num1;
while(num1>=ss)
{
i=num1%ss;
num1/=ss;
ms[k1--]=i>9?i-10+'a':i+'0';
}
ms[k1--]=num1>9?i-10+'a':num1+'0';
ms[k1]=znak;
ms[k2++]='.';
while(num!=0 && k2-11<=t)
{
num*=ss;
i=num;
num-=i;
ms[k2++]=i>9?i-10+'a':i+'0';
}
cout<<"\n";
for (i=k1;i<k2;i++) {cout<<ms[i];}
}
Объяснение кода листинга программы
- Включаем заголовочный файл iostream для работы с потоками ввода-вывода
- Используем пространство имен std для использования стандартных типов и функций
- Объявляем переменные:
- ss (целое) для хранения основания системы счисления
- k1 (целое) для хранения индекса первого символа в массиве ms
- k2 (целое) для хранения индекса последнего символа в массиве ms
- t (целое) для хранения точности вычислений
- num (двойное) для хранения числа, которое необходимо перевести
- num1 (целое) для хранения копии числа num
- i (целое) для использования в циклах
- ms (массив символов) для хранения перевода числа в символы
- znak (символ) для хранения знака числа
- Выводим сообщение и считываем число num с помощью функции cin
- Если число num отрицательное, меняем знак на минус и умножаем на -1
- Выводим сообщение и считываем основание системы счисления ss
- Выводим сообщение и считываем точность t
- Копируем число num в num1
- Вычисляем значение переменной num как разность между числом num и num1
- Начинаем цикл while, который выполняется пока num1 больше или равно ss
- Внутри цикла вычисляем остаток от деления num1 на ss и сохраняем его в переменной i
- Делим num1 на ss и обновляем значение num1
- Если i больше или равно 10, добавляем к i-10 символа от 'a' до 'f' и сохраняем в массиве ms
- Если i меньше или равно 9, добавляем к i+10 символы от '0' до '9' и сохраняем в массиве ms
- Уменьшаем значение k1 на 1
- Если num1 больше или равно ss, продолжаем цикл
- Если num1 меньше ss, выходим из цикла
- Добавляем знак минус к ms[k1]
- Увеличиваем значение k2 на 1
- Начинаем цикл while, который выполняется пока num не равно 0 и k2-11 меньше или равно t
- Внутри цикла умножаем num на ss и обновляем значение i
- Вычитаем i из num и обновляем значение num
- Если i больше или равно 10, добавляем к i-10 символа от 'a' до 'f' и сохраняем в массиве ms
- Если i меньше или равно 9, добавляем к i+10 символы от '0' до '9' и сохраняем в массиве ms
- Уменьшаем значение k2 на 1
- Если num не равно 0 и k2-11 меньше или равно t, продолжаем цикл
- Если num равно 0, выходим из цикла
- Выводим массив ms с помощью цикла for, начиная с k1 и заканчивая k2-1