Формально перевод десятичного числа D в двоичное B делается так: Исходное число делится с остатком на 2 при этом частное запоминаем для дальнейших операций, а остаток записываем в младший бит двоичного числа. Затем частное снова делится на 2 и остаток записывается в следующий разряд И так до тех пор, пока не получится такой результат - частное равно 0 а остаток равен 1. Разберем пример с десятичным числом 2001 2001/2=1000 ост 1 (1й остаток младший разряд (крайний справа)) 1000/2=500 ост 0 500/2=250 ост 0 250/2=125 ост 0 125/2=62 ост 1 62/2=31 ост 0 31/2=15 ост 1 15/2=7 ост 1 7/2=3 ост 1 3/2=1 ост 1 1/2=0 ост 1 (Старший разряд (крайний слева))
Теперь "Вписываем" остатки, в разряды двоичного числа, начиная с 1-го младшего: 11111010001
#include <iostream> //подключаем библиотеки #include <windows.h> //подключаем библиотеки #include <stdio.h> //подключаем библиотеки #include <conio.h> //подключаем библиотеки #include <string> //подключаем библиотеки using namespace std; //танцы с бубном int main() //танцы с бубном 2 { setlocale( LC_ALL,"Russian" ); //выводим все русскими буквами float s; //расстояние float r; //расход бензина float c; //цена бензина float k; //результат float b; //затраченный бензин float f; //удвоенное значение b float n; //объем бака float p; //проценты бака float g; //удвоить ли b float i; //скока баков потратите float z; //скока литров топлива потратите
cout << "Программа для вычисления стоимости поездки куда-либо и обратно\n"; //пишем, что за прога
cout << "Расстояние до места назначения (км) -> "; //просим ввести данные v:s; //ставим метку для возвращения cin >> s; //считываем значение if (s <= 0) //ставим условие если переменная меньше или равно 0, тогда пишем ошибку и возвращаемся { cout << "Ошибка. Расстояние не может быть равно 0, введите еще раз -> "; goto v; }
cout << "Расход топлива (литров на 100 км пробега) -> "; //просим ввести данные x:r; //ставим метку для возвращения cin >> r; //считываем значение if (r <= 0) //ставим условие если переменная меньше или равно 0, тогда пишем ошибку и возвращаемся { cout << "Ошибка. Расход топлива не может быть равно 0, введите еще раз -> "; goto x; }
cout << "Цена литра топлива (руб.) -> "; //просим ввести данные y:c; //ставим метку для возвращения cin >> c; //считываем значение if (c <= 0) //ставим условие если переменная меньше или равно 0, тогда пишем ошибку и возвращаемся { cout << "Ошибка. Цена литра топлива не может быть равно 0, введите еще раз -> "; goto y; }
cout << "Введите объем бака (литров) -> "; //просим ввести данные h:n; //ставим метку для возвращения cin >> n; //считываем значение if (n <= 0) //ставим условие если переменная меньше или равно 0, тогда пишем ошибку и возвращаемся { cout << "Ошибка. Объем бака не может быть равно 0, введите еще раз -> "; goto h; }
b = r / 100 * s; //рассчитываем значение переменной k = b * c; //рассчитываем значение переменной f = k * 2; //рассчитываем значение переменной
cout << "Учитывать затраты на обратную дорогу? (1 да/0 нет) -> "; //просим ввести данные cin >> g; //считываем значение переменной if (g == 1) //ставим условие, если g = 1, тогда меняем расчета переменных { f = k * 2; b = r / 100 * s; } else { f = k * 1; b = (r / 100 * s) / 2; }
z = n - b; //рассчитываем значение переменной
cout << "\nПоездка до задуманного места обойдется в " << f << " руб.\n"; //выводим данные
cout << "Вы потратите " << b << " литр. топлива\n"; //выводим данные
cout << "У вас останется в баке " << z << " литр. топлива\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; //выводим данные
system("pause"); //в конце исполнения программы ждем нажатия любой кнопки и закрываемся) }
1414 - суммы цифр могут быть только 14 и 14 148 - только 14 и 8 145 - только 14 и 5
214 не может быть такого результата, так как суммы цифр могут быть только 2 и 14, но записаны они в порядке возрастания. 515 - 5 и 15 - записаны в порядке возрастания, не соответ. условию. 814 - 8 и 14 - не соотв. условию 114 - 11 и 4 (но может быть и 1 и 14) , в принципе - такой результат возможен ответ 5
Исходное число делится с остатком на 2 при этом частное запоминаем для дальнейших операций, а остаток записываем в младший бит двоичного числа. Затем частное снова делится на 2 и остаток записывается в следующий разряд И так до тех пор, пока не получится такой результат - частное равно 0 а остаток равен 1.
Разберем пример с десятичным числом 2001
2001/2=1000 ост 1 (1й остаток младший разряд (крайний справа))
1000/2=500 ост 0
500/2=250 ост 0
250/2=125 ост 0
125/2=62 ост 1
62/2=31 ост 0
31/2=15 ост 1
15/2=7 ост 1
7/2=3 ост 1
3/2=1 ост 1
1/2=0 ост 1 (Старший разряд (крайний слева))
Теперь "Вписываем" остатки, в разряды двоичного числа, начиная с 1-го младшего:
11111010001
Т.е.
Аналогично переводим десятичное 10
10/2=5 ост 0
5/2=2 ост 1
2/2=1 ост 0
1/2=0 ост 1
И 21 десятичное
21/2=10 ост 1
10/2=5 ост 0
5/2=2 ост 1
2/2=1 ост 0
1/2=0 ост 1
ИТОГО Получится этакое ЧУДО, когда все соберем
P.S. Можно проверить калькулятором. Стандарный WINDOWS калькулятор может переводить из одной системы счисления в другую.