R6-6 统计某数的每一位数字中偶数出现的次数

本题要求实现一个函数,可统计任一整数的每一位数字中偶数出现的次数。例如-31254中,偶数出现了2次,则该函数应该返回2。注意:0为偶数。

函数接口定义:

int Count_Digit ( const int N );

其中 N 是用户传入的参数。 N 的值不超过int的范围。函数须返回 N 的每一位数字中偶数出现的次数。

裁判测试程序样例:


#include <stdio.h>

int Count_Digit ( const int N );

int main()
{

  int N;

  scanf("%d", &N);

  printf("%d", Count_Digit(N));

  return 0;

}

/* 请在这里填写答案 */

输入样例:

-31254

输出样例:

2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int Count_Digit(const int N) 
{
    int num = N < 0? -N : N;
    int count = 0;
    while (num > 0) 
    {
        int digit = num % 10;
        if (digit % 2 == 0) 
        {
            count++;
        }
        num /= 10;
    }
    return count;
}

### Java中计算整数位数字之和的方法 在Java中,可以通过多种方式来实现计算一个整数的各位数字之和的功能。以下是基于几种常见方法的具体实现。 #### 方法一:通过字符串转换的方式 可以先将整数转换成字符串形式,再逐一遍历字符并将其转回值进行累加。 ```java public class SumOfDigits { public static int sumDigitsWithString(int n) { String str = Integer.toString(Math.abs(n)); // 转换为绝对值防止负号干扰 int sum = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); sum += Character.getNumericValue(c); // 将字符转化为对应的数字 } return sum; } public static void main(String[] args) { System.out.println(sumDigitsWithString(-12345)); // 输出应为15 } } ``` 此方法利用了`Integer.toString()`函数以及`Character.getNumericValue()`函数完成操作[^1]。 #### 方法二:通过取模运算与除法循环 另一种更高效且不依赖于字符串的操作是使用学中的取模(`%`)和整除(`/`)运算符逐步提取每一位数字。 ```java public class SumOfDigits { public static int sumDigitsWithMath(int n) { int sum = 0; n = Math.abs(n); // 取绝对值以支持负 while (n > 0) { sum += n % 10; // 提取最后一位 n /= 10; // 去掉最后一位 } return sum; } public static void main(String[] args) { System.out.println(sumDigitsWithMath(987654321)); // 输出应为45 } } ``` 这种方法避免了额外的据结构开销,并且性能较好[^4]。 #### 方法三:封装为公共静态方法供调用者使用 为了提高代码复用性和模块化程度,还可以把上述逻辑封装到一个公用的静态方法里以便其他部分程序随时调用它。 ```java public class UtilityFunctions { /** * 计算给定整数各位置上数字总和。 * * @param n 输入的一个任意大小的整数 * @return 各位数字相加之和的结果 */ public static int sumDigits(int n) { int totalSum = 0; n = Math.abs(n); do { totalSum += n % 10; n /= 10; } while (n != 0); return totalSum; } public static void main(String[] args){ System.out.println(UtilityFunctions.sumDigits(12345)); } } ``` 这里采用了一个`do-while`循环确保即使当初始值小于等于零时也能正常工作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值