1164.digit函数
大家帮我看看这个代码如何简化:
#include<bits/stdc++.h>
using namespace std;
unsigned long long digit(int n,int k){
for(unsigned long long i=1;i<=n;i++){
if(k==1){
return n%10;
}else if(k==2){
return n/10%10;
}else if(k==3){
return n/100%10;
}else if(k==4){
return n/1000%10;
}else if(k==5){
return n/10000%10;
}else if(k==6){
return n/100000%10;
}else if(k==7){
return n/1000000%10;
}else if(k==8){
return n/10000000%10;
}else if(k==9){
return n/100000000%10;
}else if(k==10){
return n/1000000000%10;
}else if(k==11){
return n/10000000000%10;
}else if(k==12){
return n/100000000000%10;
}else if(k==13){
return n/1000000000000%10;
}else if(k==14){
return n/10000000000000%10;
}else if(k==15){
return n/100000000000000%10;
}else if(k==16){
return n/1000000000000000%10;
}else if(k==17){
return n/10000000000000000%10;
}else if(k==18){
return n/100000000000000000%10;
}else if(k==19){
return n/1000000000000000000%10;
}
}
}
int main(){
unsigned long long n,k;
cin>>n>>k;
cout<<digit(n,k);
return 0;
}
这里我使用了枚举,考试可能超时
这段代码可以通过将 if…else if 语句替换为一行表达式来简化,使用取模运算符(%)和样式一些其他的简化方法。修改后的函数如下:
unsigned long long digit(int n, int k){
return (n / (unsigned long long)pow(10, k - 1)) % 10;
}
这个函数中,使用了指数函数 pow() 来计算 10 的幂,然后使用取模运算符(%)来提取第 k 位上的数字。
所以你用for是干什么?