B2145【digit函数】题解

· · 个人记录

第一种解法(来源于Anclogy)

思路

用递归思想定义一个函数功能:返回数字 n 从右数起第 k 位。

ACcode

#include<iostream> 
using namespace std;
long fh(int n,int k)//返回数字 n 从右数起第k位.
{
    k = k - 1;
    if(k == 0)//判断是否到达递归边界k=0
    return n % 10;
    else return fh(n / 10,k); //否则继续递归
}
int main(){
    int n,k;
    cin >> n >> k;
    cout << fh(n,k);
    return 0;
}

第二种解法(来源于我自己

思路

数字 n 从右数的第 k 位就是 n 的第 k 位,可以用剥离数位的方法来做。

ACcode

#include<bits/stdc++.h>
using namespace std;

int digit(int n,int k){
    for(int i=1;i<k;i++) n/=10;//将第 k 位放数末尾
    return n%10; //返回第 k 位
}

int main(){
    int n,k;
    scanf("%d %d",&n,&k);
    printf("%d",digit(n,k));
    return 0;
}

第三种解法(依旧来源我自己

思路

n 不一定要用 int 来储存,可以用 string 储存,这样的话 n 从右数的第 k 位的索引就是用字符串长度减去 k 。

ACcode

#include<bits/stdc++.h>
using namespace std;

int digit(string n,int k){
    char c=n[n.size()-k]; //获得第 k 位(字符类型)
    int a=c-'0'; //将字符类型的 c 转成整型
    return a;
}

int main(){
    string n;
    int k;
    cin>>n>>k;
    printf("%d",digit(n,k));
    return 0;
}

谢谢大家