C - Even Digits
题目意为:
非负整数满足以下条件时,称它为好整数:n。
- 当所有位上的数都是偶数时(0,2,4,6,8),就是一个好整数。
例如,682024就是一个好整数。
给出一个数n,要求得出第n个好整数。
解析:
显然,好整数就是0,2,4,6,8这五个数,在各位上的排列组合。
好整数是一位时,有51个。
好整数是两位时,有52个。
n直接%5可以得到各位上数字。
n/5后继续%可以得到更高位的数字。
注意:
n=1的情况单独列出
我们可以分别求出每一位上的好整数,正序输出就能得到想要的结果。
AC代码
#include <iostream>
using namespace std;
#define int long long
signed main()
{
int n;
scanf("%lld",&n);
//把0,2,4,6,8放入数组
int a[6];
int p=0;
for(int i=0;i<5;i++){
a[i]=p;
p+=2;
}
int b[50];
int t=n-1;//方便后期计算
int j=0;
//从后向前一位位取出
while(t){
b[j]=a[t%5];
t/=5;
j++;
}
//输出
for(int i=j-1;i>=0;i--){
printf("%d",b[i]);
}
if(n==1){
printf("0");
}
}