每日一题3.8.2

每日一题 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;
	

}

参考答案
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lxb18821659801/article/details/88371877