L1-017 到底有多二

1. 题目详情

一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。

输入格式:

输入第一行给出一个不超过50位的整数N。

输出格式:

在一行中输出N犯二的程度,保留小数点后两位。

输入样例:
-13142223336
输出样例:
81.82%

2. 思路

把输入的整数N当成字符串,遍历循环字符串,记录下2的个数,判断是否为负数只需要判断第一个字符是否为’-', 判断是否为偶数只需要判断最后一个字符是否是偶数即可,最后计算

3. 代码示例

import java.io.*;

public class 到底有多二 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String n = bf.readLine();
        char[] c = n.toCharArray();
        //记录2的个数
        double count = 0;
        //分别记录是否为负数,是否为偶数
        boolean negative = false, even = false;
        //是负数
        if (c[0] == '-') {
            negative = true;
        }
        //是偶数
        if ((c[c.length - 1] - '0') % 2 == 0) {
            even = true;
        }
        for (char value : c) {
            //记录2的个数
            if (value == '2') {
                count++;
            }
        }
        //计算结果
        double result = 0.0;
        //是负数且为偶数
        if(negative && even){
            result = (count / (c.length - 1)) * 1.5 * 2 * 100;
        }
        //不是负数但是偶数
        else if(!negative && even){
            result = (count / c.length) * 2 * 100;
        }
        //是负数但不是偶数
        else if(negative){
            result =(count / (c.length - 1)) * 1.5 * 100;
        }
        //不是负数也不是偶数
        else{
            result = (count / c.length) * 100;
        }
        System.out.printf("%.2f%%", result);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lilianac

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值