名人说:博学之,审问之,慎思之,明辨之,笃行之。——《中庸》
进度:C/C++语言100题练习计划专栏,目前90/100
🥇C/C++语言100题练习专栏计划:目的:巩固练习C/C++语言,增强上机、动手实践能力,交流学习!
Problem Description
给定一个十进制整数
n
n
n 和一个小整数
x
x
x。将整数
n
n
n 转为
x
x
x 进制。对于超过十进制的数码,用 A
,B
… 表示。
Input
第一行一个整数
n
n
n;
第二行一个整数
x
x
x。
Output
输出仅包含一个整数,表示答案。
Sample Input
1000
2
Sample Output
1111101000
★提示:
【数据规模和约定】
保证
n
n
n 不超过
1
0
9
10^9
109,
x
x
x 不超过
36
36
36。
#include
#include
#include
typedef long long ll;//定义long long类型为ll
using namespace std;
string c="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//存数
void f(ll x,ll m)
{
if(x/m)
f(x/m,m);//递归
cout<<c[x%m];//输出进制转换后的值
}
int main()
{
ll n,x;
//输入十进制整数n和小整数x
cin>>n>>x;
if(x==0)
{
puts("0");
return 1;
}
f(n,x);
cout<<endl;
return 0;
}
★关于本题思路及进制转换方法:
1、本题思路简述
题意:给定一个十进制整数 n n n 和一个小整数 x x x。将整数 n n n 转为 x x x 进制。对于超过十进制的数码,用
A
,B
… 表示。
从问题描述来看,要使用进制转换相关知识进行求解
进制转换,肯定要讲一下短除法。就是每次看余数并做除法。
比如 10 转换 2 进制。
13 mod 2=1
6 mod 2=0
3mod2=1
1mod2=1
最后倒序枚举余数
即可。
那么,我们可以有两种方案,递归和存数组。
存数组,字面意思,把余数存下来,最后翻转,输出。
递归,每次准备着输出数,但先递归后面的余数,最后返回来输出。
以上代码实现使用的是递归,看到这里的小伙伴可以尝试存数组的方式。
2、进制转换举例
1️⃣十进制--->二进制
(图片原图来源网络,二次创作,侵删)
2️⃣十进制-->八进制
10进制数转换成8进制的方法,和转换为2进制的方法类似,唯一变化:除数由2变成8。
来看一个例子,如何将十进制数120转换成八进制数。
用表格表示:
120转换为8进制,结果为:170。
等等…这些进制转换方法可能不唯一,但是用这种方法去实现都是类似的。
1000
2
1111101000
--------------------------------
Process exited after 3.239 seconds with return value 0
请按任意键继续. . .
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心