#include<iostream>
using namespace std;
int main()
{
int n, m, power, number=0, digit;
cin >> m;
cin >> n;
power = n;
while(m<power) power *= n;
do {
power /= n;
digit = 0;
do{
digit ++;
m -= power;
}while(power <= m);
number += digit;
number *= 10;
}while(power > 0);
cout << number << endl;
system("pause");
return(0);
}
Число М по основанию Н, C++
написать программу которая переводит число М из десятичной системы в систему с базой Н
Ц++
Чисо переводится в любую систему счисления последовательным делением M на Н и записью остатков в обратном порядке. Посмотри перевод в двоичную и напиши по аналогии, заменив 2 на Н.
Вроде сделал, но закралась какая-то ошибка, помогите найти ошибку в проге....
С++, а не Ц++ плиз.
в посте #19 данной темы вполне нормальное решение твоей задачи, постарайся его понять:
http://forum.codenet.ru/showthread.php?t=24199
Логика: Програма получает натуральное число М и Н, где М исходное число, а Н основание. Основание Н вводится в такую степень(предельная степень) при которой уже степень + 1 будет больше М. От этого числа М, отнимают столько раз предельную степень пока справедливо, что предельная степень > М. Полученое число раз умножаем на 10 в степени (преедльной степень) и таким образом формируем число....
Только правда цифры в обратном порядке выдаёт
Код:
#include<iostream>
using namespace std;
int main()
{
int n, m, x, y, num;
num = 0;
cin >> m;
cin >> n;
do { x = m/n;
y = m%n;
m = x;
num += y;
num *= 10;
}while(m > n);
y = m%n;
num += y;
cout << num << endl;
system ("pause");
return 0;
}
using namespace std;
int main()
{
int n, m, x, y, num;
num = 0;
cin >> m;
cin >> n;
do { x = m/n;
y = m%n;
m = x;
num += y;
num *= 10;
}while(m > n);
y = m%n;
num += y;
cout << num << endl;
system ("pause");
return 0;
}
Чтобы из десятичной СС перевести в любую другую нужно это число делить на Q до тех пор пока не получим целую часть равной 0:
Пример: нужно перевести число (156d) в СС 8(oct, т.е. Q = ( 8 )):
156 / 8 = 19 (4) <- в скобках остаток
19 / 8 = 2 (3)
2 / 8 = 0 (2)
Получили что (156d) = (234o) - читаем числа в скобках с низу вверх.
(c)
Это я использовал за основу!
Код:
#include<iostream>
using namespace std;
int main()
{
int n, m, y, num, pow = 1;
num = 0;
cin >> m; //number
cin >> n; //base
do{
y = m%n;
m /= n;
num += (y * pow);
pow *= 10;
}while(m > 0);
cout << endl << num << endl;
system ("pause");
return 0;
}
using namespace std;
int main()
{
int n, m, y, num, pow = 1;
num = 0;
cin >> m; //number
cin >> n; //base
do{
y = m%n;
m /= n;
num += (y * pow);
pow *= 10;
}while(m > 0);
cout << endl << num << endl;
system ("pause");
return 0;
}
Вот как я решил эту проблему с помощью массива:
Код:
#include<iostream>
using namespace std;
int main()
{
int n, m, x, y, i;
int num[16]={0};
// num = 0;
cout << "Vvedite m" << endl;
cin >> m;
cout << "Vvedite n, gde n<10"<<endl;
cin >> n;
if ((n>10)||(n<2)||(m<0)){abort();}
else{
i = 15;
do { x = m/n;
y = m%n;
m = x;
num = y;
//num /= 10;
i--;
}while(m > n);
y = m%n;
num = y;
i =0;
cout << "\nOtvet="<< endl;
do{
cout << num;
i++;} while(i != 16);
return 0;
}
}
using namespace std;
int main()
{
int n, m, x, y, i;
int num[16]={0};
// num = 0;
cout << "Vvedite m" << endl;
cin >> m;
cout << "Vvedite n, gde n<10"<<endl;
cin >> n;
if ((n>10)||(n<2)||(m<0)){abort();}
else{
i = 15;
do { x = m/n;
y = m%n;
m = x;
num = y;
//num /= 10;
i--;
}while(m > n);
y = m%n;
num = y;
i =0;
cout << "\nOtvet="<< endl;
do{
cout << num;
i++;} while(i != 16);
return 0;
}
}
a зачем массив? я же подправила твой вариант проги без массива. смотри мой предыдущий пост, или хочешь сказать что она неработает у тебя?
я хотел только похвастаться!С массивом написал, т.к это был один из вариантор упорядлчить число. Прогу с массивом написал в тот-же вечер, просто сразу не разместил.