• c语言练习73:统计位数为偶数的数字


    统计位数为偶数的数字

    给你⼀个整数数组 nums ,请你返回其中位数为 偶数 的数字的个数。

    • ⽰例 1:

    输⼊:nums = [12,345,2,6,7896]

    输出:2

    解释: 12 是 2 位数字(位数为偶数)

    345 是 3 位数字(位数为奇数)

    2 是 1 位数字(位数为奇数)

    6 是 1 位数字 位数为奇数)

    7896 是 4 位数字(位数为偶数)

    因此只有 12 和 7896 是位数为偶数的数字

    算法思路:

    1. 定义⼀个变量 ans ,并将其初始化为0;

    2. 遍历数组中每个数,计算当前数被10除不为0的次数,即当前数的位数;

    3. 当位数为偶数时 ans 的值加⼀;

    4. 返回 ans 。

    解法⼀(模拟):

    某个数被10相除不为0的次数即为它的位数。

    代码:

    1. int count(int num) {
    2. int n = 0;
    3. //因为题⽬中的数据为正数,所以不⽤特判0的情况,直接计算位数
    4. while (num) {
    5. n++;
    6. num /= 10;
    7. }
    8. return n;
    9. }
    10. int findNumbers(int* nums, int numsSize) {
    11. int i = 0;
    12. int ans = 0;
    13. //遍历数组
    14. for (i = 0; i < numsSize; i++) {
    15. //如果位数是2的倍数,则位数为偶数,记录次数
    16. if (count(nums[i]) % 2 == 0) {
    17. ans++;
    18. }
    19. }
    20. //返回答案
    21. return ans;
    22. }

    解法⼆(sprintf()函数):

    利⽤ sprintf 函数将数字转化为字符串形式,则字符串⻓度即为数字位数。

    • sprintf函数: sprintf函数是⼀个C标准库函数,⽤于将格式化的数据写⼊⼀个字符串中。它的函数原型为:

    int sprintf(char *str, const char *format, ...);

    其中,第⼀个参数str是⼀个字符指针,指向⽤于存储输出的字符数组,第⼆个参数format是⼀个字 符串,包含要写⼊字符数组的⽂本和格式控制字符,后⾯的省略号表⽰可选的参数,⽤于填充格式控 制字符中的占位符。

    sprintf函数的⼯作⽅式类似于printf函数,不同之处在于它将输出写⼊到⼀个字符串中⽽不是标准输 出。它返回写⼊到字符数组中的字符数,不包括字符串的结尾空字符'\0'。如果出现错误,则返回负 数。

    • 求字符串 str ⻓度:字符串函数strlen: 字符串str⻓度=strlen(str)。

    算法思路:

    1. 定义⼀个变量 ans ,将其初始化为0;

    2. 定义⼀个字符串数组 arr ;

    3. 遍历原数组,将当前数字利⽤ sprintf 函数转化为字符串形式放⼊字符串数组;

    4. 求字符串⻓度,当⻓度为偶数时 ans 的值加⼀;

    5. 返回 ans 。

    代码:

    1. int findNumbers(int* nums, int numsSize) {
    2. int i = 0;
    3. int ans = 0;
    4. //定义字符串数组⽤来存放转化后的字符串
    5. char arr[7] ;
    6. for (i = 0; i < numsSize; i++) {
    7. //将数字转化为字符串
    8. sprintf(arr, "%d", nums[i]);
    9. //字符串⻓度为偶数,即当前数字位数为偶数时记录⼀次
    10. if (strlen(arr) % 2 == 0) {
    11. ans++;
    12. }
    13. }
    14. //返回答案
    15. return ans;
    16. }

  • 相关阅读:
    【初识JavaScript-03】
    vlan实验
    关于最近项目数字前端FLOW的一些总结
    字节的一个小问题 npm 和 yarn不一样吗?
    C++ opencv图像直方图
    python3:len()返回对象的长度(元素数量) 2023-11-17
    自顶向下Redis分布式锁-前篇
    【JavaSE】类和对象(下篇)
    国家开放大学 模拟试题 训练
    1286_FreeRTOS的任务优先级设置实现分析
  • 原文地址:https://blog.csdn.net/2301_77479435/article/details/133487274