题目
有这个一个9位数 它由123456789组成,每个数字出现仅且出现一次,数字的前一位能被1整除,前2位能被2整除。。。。前9位能被9整除,求这个数字。
解析
首先,我们根据题目可以获得这些信息。
1. 这是个九位数,由123456789组成
2. 每个数字出现仅且出现一次
3. 数字的前一位能被1整除,前2位能被2整除。。。。前9位能被9整除。
那么我们先罗列出由123456789组成的九位数,代码如下
//罗列出由123456789组成的九位数
for (long i=123456789;i<=987654321;i=i+9) {
}
这时候我们需要思考一下,我们为什么要写程序。就是为了更高效的处理业务。那么这个程序的最高效的办法就是先针对第三条信息做出判断。在观察第三条信息时,我发现了一个比较特殊的信息。它筛选出最少量的符合条件的整数,那就是前五位能被五整除的数。因为这个九位数是由123456789组成,所以我们完全可以只需截取出第五位是五的整数。值得一提的是,判断这个整数必须要做的就是转化为字符串。然后进行判断。代码如下:
//判断数字第五位是否是5
String str=num+"";
if(str.substring(4, 5).equals("5")){
return true;
}else{
return false;
}
然后继续第三条信息的判断
//判断数字前N位是否能被N整除
boolean flag=true;
String str=num+"";
for(int i=2;i<=9;i++){
//截取前i位数字
String temp=str.substring(0,i);
//把截取的字符串转化成数字
long my=Long.parseLong(temp);
if(my%i==0){
}else{
flag=false;
break;
}
}
剩下的就是把这些数据里的符合第二条信息的提取出来
//判断数字组成是否正确 它由123456789组成,每个数字出现仅且出现一次
boolean flag=true;
String str=num+"";
for(int i=1;i<=9;i++){
if(str.replace(i+"", "").length()!=8){
flag=false;
break;
}
}