蓝桥杯省赛:幸运数字
该题考的是十进制与其他进制的转换
进制转换
一个十进制数字n可以表示成m进制下的数字与m的幂乘积的形式
例如:126 = 1*8^2 + 7*8^1 + 6*8^0
那么通过对十进制数字对m取模,除m的循环操作,即可得到m进制下的各位数字
知道这个原理之后,我们定义一个进制转换的函数,在函数里面我们,将m进制下各个位的数字求和,判断十进制数字能否整除m进制下的各个位数字之和。
#include <bits/stdc++.h>
using namespace std;
#define int long long
/*
进制转换
一个十进制数字n可以表示成m进制下的数字与m的幂乘积的形式
例如:126 = 1*8^2 + 7*8^1 + 6*8^0
那么通过对十进制数字对m取模,除m的循环操作,即可得到m进制下的各位数字
*/
bool fun(int n,int m){//将n在m进制下的各位数字分离求和
int j = n;
int ans = 0;
while(n){
ans+=n%m;
n/=m;
}
if(j%ans==0) return true;
return false;
}
signed main() {
int ans = 0;
for(int i = 1;;i++){
if(ans==2023) {
cout<<i-1<<endl;
return 0;
}
if(fun(i,2)&&fun(i,8)&&fun(i,10)&&fun(i,16)) ans++;
}
return 0;
}