题解

题目难度:简单

知识点:进制转化、栈、递归

十进制转二进制(转为其他进制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;
}