数字校验

目标:用户输入一段数字,判断其是否合法
规则:从数字末尾开始,逆向将奇数位相加,取和为sum1;逆向将偶数位乘以2再相加(若乘积为两位数,减9),取和为sum2;sum1+sum2能够被10整除,则认为合法
输入:5432123456788881
输出:合法


思路:这道题不难,关键点在于如何把字符转换为数字以便进行相加减;另外,该题是逆向遍历+判断奇偶,所以要有两个“指针”,一个从后往前遍历,可用下标表示;另一个判断奇偶位,本质是从前往后走。

public class Que23 {

    /**
     * @param s
     * @return
     */
    public static String judge (String s) {
        int sum=0,sum1=0,j=1;
        for(int i=s.length()-1;i>=0;i--,j++){
            if (j%2==1) {
                sum=sum+s.charAt(i)-'0';
            }
            else {
                sum1+=(s.charAt(i)-'0')*2>=10?(s.charAt(i)-'0')*2-9:(s.charAt(i)-'0')*2;
            }
        }
        //试试Interger。parseInt(s.charAt(i))时不行的,因为这样是字符串的转换格式,不是单个字符;
        System.out.println("sum="+sum);
        System.out.println("sum1="+sum1);
        System.out.println("sum1+sum="+(sum1+sum));//若+(sum1+sum)不加括号,结果为3535,表示连续两个连接
        //System.out.println(s.charAt(1));
        //System.out.println(s.charAt(0));
    //System.out.println(s.charAt(1)+s.charAt(0));//自动转为ascii码相加,52+53
        if((sum+sum1)%10==0)
            return "YES";
        else return "NO";
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        @SuppressWarnings("resource")
        Scanner scanner=new Scanner(System.in);
        String s=scanner.nextLine();
        System.out.println(judge(s));
    }

}
结果:
5432123456788881
sum=35
sum1=35
sum1+sum=70
YES

最想和大家分享的就是字符如何转为数字,关于字符串如何转为数字,参考这个链接java中字符串和数字相互转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值