B2145【digit函数】题解
Eason66674 · · 个人记录
第一种解法(来源于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;
}
谢谢大家