题解
题目难度:简单
知识点:进制转化、栈、递归
十进制转二进制(转为其他进制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; }