蓝桥杯省赛无忧 编程8

发布时间:2024年01月22日

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std ;
int readInt() ;
int s (int x ) {
    if (x == 0) return 1 ;
    if (x & 1) {
        return s(x - 1) + 1 ;
    }
    if (x %2 == 0) {
        return s(x / 2) ;
    }
}
int main ()
{
    int x = readInt () ;
    printf ("%d\n" , s(x)) ;
    return 0 ;
}
int readInt ()
{
    int x = 0, f = 1 ;
    char c = getchar () ;
    while (c > '9' ||c < '0')
    {
        if (c == '-') f = -1 ;
        c= getchar () ;
    }
    while  (c >='0' &&c <='9')
    {
        x = x * 10 +c - '0';
        c = getchar () ;
    }
    return x *f ;
}

在这里插入图片描述
代码解析

int readInt();

这是readInt()函数的声明,它的定义在main()函数之后。这个函数用于从标准输入读取整数。

int s(int x) {
    if (x == 0) return 1;
    if (x & 1) {
        return s(x - 1) + 1;
    }
    if (x % 2 == 0) {
        return s(x / 2);
    }
}

这是“神秘函数”S(x)的实现,它是一个递归函数:

  • 如果x为0,按照定义返回1。
  • 如果x为奇数(x & 1检查x的最低位是否为1),递归调用S(x - 1)并将结果加1。
  • 如果x为偶数(x % 2 == 0检查x是否被2整除),递归调用S(x / 2)

代码中的偶数检查有些多余,因为如果x不是奇数(x & 1为false),那么它肯定是偶数。

int main() {
    int x = readInt();
    printf("%d\n", s(x));
    return 0;
}

main()函数中,首先调用readInt()函数读取整数x,然后调用s()函数计算S(x)的值,并通过printf将结果打印出来。

int readInt() {
    int x = 0, f = 1;
    char c = getchar();
    while (c > '9' || c < '0') {
        if (c == '-') f = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9') {
        x = x * 10 + c - '0';
        c = getchar();
    }
    return x * f;
}

这是readInt()函数的定义,它从标准输入读取连续的字符直到遇到非数字字符停止。该函数能够处理带有负号的整数,并将输入的字符转换为整数值。

文章来源:https://blog.csdn.net/weixin_74774974/article/details/135758068
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。