原题:用0~9这十个数字组成是11的倍数的最大十位数是多少。
一开始的代码是当然是暴力破解啊
//用0~9这十个数字组成是11的倍数的最大十位数是多少。
#include <iostream>
#define ll long long
using namespace std;
int check(ll x)
{
int a[10] = {0};
while(x>0){
ll temp = x%10;
a[temp] = 1;
x = x/10;
}
for(int i=0;i<10;i++){
if(a[i]!=1){
//重复
return 0;
}
}
return 1;//不重复
}
int eleven(ll x)
{
if(x % 11 == 0){
return 1;
}
return 0;
}
int main(void)
{
ll x = 9876543210;
//哪些数是11的倍数
while(x>=1000000000){
if(check(x)==1){
//各个数字不重复,判断是否是11的倍数
if(eleven(x)==1){
//是11的倍数,输出
cout << x;
return 0;
}
}
x--;
}
return 0;
}
得到结果
后来老师说
原理:若B进制的数是B+1的倍数,则奇数位数字和减去偶数位数字和为B+1的倍数
什么意思呢?举个例子。
二进制 101010 ,偶位数的和3 ,奇位数的和0,3-0=3
原理解释:若是2进制,则奇数位数字和减去偶数位数字的和为3(或3的倍数也行),则这个数即为3的倍数
因此,知道原理后代码如下:
oh~sorry,不需要代码,自己手算