其他分享
首页 > 其他分享> > 信息学奥赛一本通 1161:转进制

信息学奥赛一本通 1161:转进制

作者:互联网

【题目链接】

ybt 1161:转进制

【题目考点】

1. 数制

2. 递归

##【解题思路】

解法1: 递归输出b进制数

解法2:递归构造倒b进制数字符串

【题解代码】

解法1:递归输出b进制数

#include<bits/stdc++.h>
using namespace std;
void toBase(int n, int b)//将数值n转换为b进制输出 
{
	if(n == 0)//如果n是0,不输出 
		return;
	toBase(n / b, b);//将n/b的值转为b进制输出 
	if(n % b >= 10)//将n%b的值以b进制输出 
		cout << char(n % b - 10 + 'A');
	else
		cout << n % b;
}
int main()
{
	int n, b;
	cin >> n >> b;
	toBase(n, b);
	return 0;
}

解法2:递归构造b进制数字字符串

#include<bits/stdc++.h>
using namespace std;
string toBase(int n, int b)//将数值n转换为b进制字符串 
{
	if(n == 0)//如果n是0,不输出 
		return string("");
	char c;//n%b这一数字对应的字符 
	if(n % b >= 10)//将n%b的值以b进制输出 
		c = n % b - 10 + 'A';
	else
		c = n % b + '0';
	return toBase(n / b, b) + c;//将n/b的值转为b进制字符串 后面连接c 
}
int main()
{
	int n, b;
	cin >> n >> b;
	cout << toBase(n, b);
	return 0;
}

解法3:非递归 值转b进制

#include<bits/stdc++.h>
using namespace std;
string toBase(int n, int b)//将数值n转换为b进制字符串 
{
	string s = "";
	int a = n;
	char c;
	do
	{
		if(a % b >= 10)
			c = a % b - 10 + 'A';
		else
			c = a % b + '0';
		s = c + s;
		a /= b;
	}while(a > 0);
	return s;
}
int main()
{
	int n, b;
	cin >> n >> b;
	cout << toBase(n, b);
	return 0;
}

标签:信息学,1161,递归,输出,int,数值,奥赛,字符串,进制
来源: https://blog.csdn.net/lq1990717/article/details/122765194