第八届蓝桥杯省赛B组c++_取数位

本文介绍了一种通过递归方式提取任意10进制整数中指定位置数字的方法。通过定义数位长度及提取指定位置数字的函数,实现对整数任意位的精确获取。

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

求1个整数的第k位数字有很多种方法。

以下的方法就是一种。

// 求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));  
    return 0;  
}  
对于题目中的测试数据,应该打印5。

请仔细分析源码,并补充划线部分所缺少的代码。

注意:只提交缺失的代码,不要填写任何已有内容或说明性的文字。

【分析】递归+数位基本操作

        每轮操作将待取数位的整数n除以10取整,直到其最后一位t为n的第k位,则t即为所求。

#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;
return f(x/10,k);  //填空
}
int main()
{
int x = 23574;
printf("%d\n", f(x,3));
return 0;
}
可以说是当时的一道送分题

 

转载于:https://www.cnblogs.com/hcd-dyh/p/8683549.html

### 关于第十四届蓝桥杯 C++ B的题目解析与难度评价 #### 题目背景与整体概述 蓝桥杯作为国内知名的编程竞之一,其阶段旨在考察参者的算法基础、程序设计能力和实际解决问题的能力。对于C++ B而言,相较于A,B更注重对选手基础知识掌握程度以及复杂问题解决能力的要。 根据以往的比经验[^1],B试题通常会涉及更多的数据结构应用和较复杂的逻辑推理过程。虽然具体到第十四届蓝桥杯C++ B的题目尚未被全面公开讨论,但从历史趋势来看,可以推测该事具有以下几个特点: - **基础知识点覆盖广泛**:包括但不限于数操作、字符串处理、循环控制语句等基本语法的应用。 - **中级算法需增加**:例如动态规划初步概念、贪心策略简单实现等方面的知识会被考查。 - **时间空间效率考量加强**:相比起简单的功能实现,在满足功能的同时还需要考虑运行时间和内存消耗等问题变得尤为重要[^2]。 #### 数据类型大小的理解及其影响 在解答过程中需要注意不同数据类型的存储位数差异所带来的潜在溢出风险或者不必要的资源浪费情况。比如bool型变量只需要一个字节即可表示true/false两种状态;而像long long这样的大整数则需占据八个字节来保存可能非常巨大的数值范围内的任意值。这种理解不仅有助于编写更加高效合理的代码,也是应对某些特定测试案例的关键所在。 #### 示例代码展示 下面给出一段用于计算两个正整数最大公约数(GCD) 的函数定义示例,这属于比较常见的基础算法练习项目之一: ```cpp #include <iostream> using namespace std; // 使用欧几里得算法解GCD int gcd(int a, int b){ while(b != 0){ int temp = a % b; a = b; b = temp; } return abs(a); } int main(){ cout << "请输入两个正整数:" ; int num1,num2; cin>>num1>>num2; if(num1<=0 || num2<=0){ cerr<<"输入错误!只接受正值。\n"; exit(1); } cout<< "它们的最大公约数为:"<<gcd(num1 , num2)<<endl; } ``` 此段代码通过不断模运算直至余数为零为止的方法找出两数间最大的共同因子。它体现了良好的编码习惯——清晰易懂且健壮性强,能够有效防止非法参数引发异常终止行为的发生。 #### 总结 综上所述,参加此类竞的学生应当扎实自己的理论功底并多加实践各类典型习题集锦中的实例分析。只有这样才能够从容面对诸如第十四届蓝桥杯这类高水平竞技场合下的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值