信息学奥赛一本通 1161:转进制
作者:互联网
【题目链接】
【题目考点】
1. 数制
2. 递归
##【解题思路】
解法1: 递归输出b进制数
- 递归问题:将数值n转换为b进制输出
- 递归关系:要想输出数值n在b进制下的数字,可以先输出数值n/b在b进制下的数字,最后输出数值n在b进制下的最低位n%b
- 递归出口:如果n为0,直接返回,不输出。
解法2:递归构造倒b进制数字符串
- 递归问题:构造数值n在b进制下的字符串
- 递归关系:要想构造数字n在b进制下的字符串,可以先构造数值n/b在b进制下的字符串,后面连接数值n在b进制下的最低位n%b
- 递归出口:如果n为0,返回空字符串
【题解代码】
解法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