Java算法实战

题目

有这个一个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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值