作者:小 琛
欢迎转载,请标明出处
题目:
输入一个十进制的数num和一个需要转换的M进制的值,将该数转换为M进制并输出。例如输入 10 2 ->1010
解题思路:
- 将一个数转换为M进制,则就是将该数除以M取余,直到商为0。
- 题目的难点在于对十进制以上情况的转换,此时加入了A,B,C,D,E,F。我们其实可以转换思维,并不是非要以整形的方式去输出,可以利用字符串解决。即定义一个数组,每个下标对应其内容,char arr[] = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘A’, ‘B,’, ‘C’, ‘D’, ‘E’, ‘F’ };
- 接着定义一个string字符串,利用循环让该数除以M取余,余数对应数组内容,头插到该字符串的内,最后输出
#include <iostream>
#include <string>
int main()
{
size_t num = 0, M = 0;
char arr[] = { '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B,', 'C', 'D', 'E', 'F' };
std::cin >> num >> M;
std::string str("");
if (num == 0)
str = '0';
while (num)
{
if (num < 0)//这里要考虑到num为负数的情况
{
num = -num;
std::cout << "-";
}
str = arr[num%M]+str;//必须要头插
num = num / M;//每次循环后num的值要修改
}
for (auto v : str)
{
std::cout << v;
}
return 0;
}