PTA——L1-017 到底有多二分数 15

文章介绍了一个整数的“犯二程度”定义,即数字中2的个数与位数的比例,考虑负数和偶数的情况。给定一个整数,程序通过遍历计算其2的个数,结合负数和偶数的条件,输出其犯二程度的百分比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

输入格式:

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

输出格式:

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

输入样例:

-13142223336

输出样例:

81.82%

 解题思路:

解题思路:

  1. 首先,声明一个字符数组 n,用于存储输入的字符串。
  2. 使用 scanf() 函数从标准输入中读取字符串,并将其存储在字符数组 n 中。
  3. 使用 strlen() 函数计算字符串的长度,并将结果存储在变量 len 中。
  4. 声明一个整型变量 count,用于统计数字 2 在字符串中出现的次数。
  5. 声明一个浮点型变量 negativeMultiplier 和一个整型变量 evenMultiplier,分别用于表示负数增加程度和偶数增加程度。
  6. 使用循环遍历字符串中的每个字符,进行如下操作:
    • 如果当前字符是数字 2,则 count 自增 1。
    • 如果字符串的第一个字符是负号 -,则将 negativeMultiplier 设置为 1.5,以增加计算结果的程度。
    • 如果当前字符是偶数或者零,则将 evenMultiplier 设置为 2,以增加计算结果的程度。
  7. 根据一些条件计算百分比,并将结果存储在变量 percentage 中,计算公式如下:
    • 如果字符串的第一个字符是负号,计算公式为 (double)count * negativeMultiplier * evenMultiplier * 100 / (len - 1)
    • 否则,计算公式为 (double)count * negativeMultiplier * evenMultiplier * 100 / len
  8. 使用 printf() 函数打印出百分比结果,并添加适当的格式化输出,如 "%.2f%%",表示保留两位小数并输出百分号。
  9. 结束程序的执行。 
#include <stdio.h>
#include <string.h>

int main() {
    char n[55] = {0};
    scanf("%s", n);
    int len = strlen(n);
    int count = 0;  // 数字2的个数
    double negativeMultiplier = 1;  // 负数增加程度
    int evenMultiplier = 1;  // 偶数增加程度

    for (int i = 0; i < len; i++) {
        if (n[i] == '2') {
            count++;  // 统计数字2的个数
        }
        if (n[0] == '-') {
            negativeMultiplier = 1.5;  // 如果是负数,增加程度为1.5
        }
        evenMultiplier = (n[i] - '0') % 2 == 0 || n[i] == '0' ? 2 : 1;  // 如果当前字符是偶数或者零,增加程度为2
    }

    // 根据条件计算百分比
    double percentage = count * negativeMultiplier * evenMultiplier * 100 / (n[0] == '-' ? len - 1 : len);
    printf("%.2f%%\n", percentage);  // 打印百分比结果

    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值