0
点赞
收藏
分享

微信扫一扫

2017年第八届蓝桥杯B组-第五题:取位数

倪雅各 2022-02-20 阅读 63

本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(C/Java)后进行提交。若题目中给出的源代码语言不唯一,则只需选择其一进行补全提交即可。复制后需将源代码中填空部分的下划线删掉,填上你的答案。提交后若未能通过,除考虑填空部分出错外,还需注意是否因在复制后有改动非填空部分产生错误。

求1个整数的第k位数字有很多种方法。 以下的方法就是一种。

请仔细分析源码,填写划线部分缺少的内容。

源代码

C

#include <stdio.h>
// 求x用10进制表示时的数位长度
int len(int x){
if(x<10) return 1;
return len(x/10)+1;
}

// 取x的第k位数字
int f(int x, int k){
if(len(x)-k==0) return x%10;
return _____________________; //填空
}

int main()
{
int x = 23574;
printf("%d\n", f(x,3));
printf("%d\n", f(893275,2));
}

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M
    #include <stdio.h>

    int len(int x){
    if(x<10) return 1;
    return len(x/10)+1;
    }

    // 取x的第k位数字
    int f(int x, int k){
    if(len(x)-k==0) return x%10; //例:f(23574,3)
    return f(x/10,k); //if(len(x)-k==0)满足,求出来的是x的最低位
    } //因为23574的第三位并不是最低位,需要/10,利用递归

    int main()
    {
    int x = 23574;
    printf("%d\n", f(x,3));
    printf("%d\n", f(893275,2));
    }

举报

相关推荐

0 条评论