题目描述
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述:
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。
输出描述:
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
示例
输入 7 2
输出 111
#include <iostream>
#include <stack>
using namespace std;
int main(){
long int num;
int n, i, size;
int flag = 0;
stack<int> src;
char arr[6] = { 'A', 'B', 'C', 'D', 'E', 'F' };
cin >> num;
cin >> n;
if (num < 0){//如果是负数,就转换为正数
num = 0 - num;
flag = 1;
}
while (num){
src.push(num % n);
num = num / n;
}
size = src.size();
if (flag){
cout << '-';
}
for (i = 0; i < size; i++){
if (src.top() > 9){
cout << arr[src.top() % 10];
src.pop();
}
else{
cout << src.top();
src.pop();
}
}
system("pause");
return 0;
}
解题思路:
十进制转化N进制,就是除N取余,然后逆向输出,直到商为0时结束运算,根据此运算过程,可以定义一个栈来存放余数,计算结束时,边打印边pop。注意转换为16进制时有ABC…的出现。