幸运整数


题目描述:

数字“4”和“7”是幸运数字,那么仅用幸运数字组成的整数就是幸运整数,请你帮忙找出第 k 个幸运整数。输入 k,输出第 k 个整数。

思路:

使用模拟的方式,像高精度一样,把每个位模拟一下做+1的操作
例如一开始是4,下一个就是7,再下一个需要进位,变为44,以此类推

我们可以使用一个数组,暂时记为mem,

void add(int pos){
    if(mem[pos]==0)mem[pos]=4;
    else if(mem[pos]==4)mem[pos]=7;
    else if(mem[pos]==7)mem[pos]=4,add(pos+1);
}

add(pos)表示把pos位上的数字加上一,如果当前位没有数字就变4,当前位是4就变7,如果是7就进位。
进位就是把前面一位上面的数字加上一,也是加一的操作,所以可以递归

完整的代码,注意在输出的时候,mem是倒着输出的

#include
using namespace std;
int k;
int mem[1000];
void add(int pos){
    if(mem[pos]==0)mem[pos]=4;
    else if(mem[pos]==4)mem[pos]=7;
    else if(mem[pos]==7)mem[pos]=4,add(pos+1);
}
void print(){
    for(int i=999;i>=0;i--){
        if(mem[i]!=0)printf("%d",mem[i]);
    }
}
int main(){
    cin>>k;
    while(k--){
        add(1);
    }
    print();
    return 0;
}