每日一题 3.8.2
进制转换问题
给定一个10进制数M,转换为N进制(2<<N<<16)的数字
超过10的用16进制的‘A’,‘B’,‘C’,‘D’等表示
解题思路: 判断M的符号,负数要在转换之后加“-”号,M%N取余放入字符串内,M/N的商是否为0作为循环终止的条件
代码实现:
#include<iostream>
#include<string>
using namespace std;
void Test(int M, int N)
{
int flag = 1;
if (N<2 || N>16)
cout << "wrong";
if (M < 0)
{
flag = -1;
M = -M;
}
int tmp = 0;
string res;
do
{
tmp = M%N;
if (tmp > 9)
{
res += tmp - 10 + 'A';
}
else
res += tmp + '0';
M = M / N;
} while (M != 0);
if (flag == -1)
{
res += "-";
}
reverse(res.begin(), res.end());
cout << res << endl;
}
int main()
{
int M, N;
cin >> M >> N;
Test(M, N);
system("pause");
return 0;
}
参考答案