题解
题目难度:简单
知识点:进制转化、栈、递归
十进制转二进制(转为其他进制k方法一致)
方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除,直到商为0为止。
其结果是从最后一个得到的余数值读到第一个余数值。
方法(一)
从上面分析,我们通过x%k依次得到余数值,从而下一次被除数x=x/k。由于需要逆序输出,采用栈的数据结构存储。当被除数x=0时,输出栈中值。
#include<iostream>
#include<stack>
using namespace std;
int main(){
long x;
int k;
cin>>x>>k;
stack<int> s;
if(x==0)
cout<<0<<endl;
else{
while(x){
s.push(x%k);
x /= k;
}
while(!s.empty()){
cout<<s.top();
s.pop();
}
cout<<endl;
}
return 0;
}方法(二)递归:
其边界条件为:当x<y时,直接得到最后一个余数,直接cout即可。
步骤一:通过调用change( x/y, y),得到后一次余数。
步骤二:输出本次x除以y的余数。
通过步骤一和步骤二的顺序即可实现,从最后一个得到的余数值开始输出直到第一个得到的余数值。
#include<iostream>
using namespace std;
void change(long x,int y){
if(x<y){
cout<<x%y;
return 0;
}
change(x/y,y);
cout<<x%y;
return 0;
}
int main(){
long x;
int k;
cin>>x>>k;
change(x,k);
return 0;
}
京公网安备 11010502036488号