题解 P6445 【[COCI2010-2011#1] SRETAN】
P6445
Description
定义由
4 和7 组成的数为幸运数,求第k 个幸运数。
Solution 1
只有
- 将
(k)_{10} 转化为二进制 - 如果是
0 输出4 ,是1 输出7 ,比如0100111 就输出4744777
Code 1
#include <bits/stdc++.h>
using namespace std;
long long j, a[100000];
void erzhi (long long i) {
while (i) {
j++;
a[j] = i % 2;
i /= 2;
}
}
void ans (long long k) {
erzhi(++k);
for (long long i = j - 1; i >= 1; i--)
if (a[i] == 0)
printf("4");
else
printf("7");
}
int main () {
long long k;
scanf("%lld", &k);
ans(k);
return 0;
}
Solution 2
我们也可以直接不用二进制,用一种类似递归的方式来。
比如我们看第
初始化
然后就可以打一份递归的代码了,这里建议用字符串存储。
By Shuchong
2020.8.7