- js24012 的博客
#P2601. 幸运数字(2026/5/19花都区c++比赛题)题解
- @ 2026-5-30 10:53:28
#P2601. 幸运数字(不是用AI做的)
这道题主要就是拆数
题目说数据在以内,所以抗跌住的摧残。
拆数就是将一个数的每一位拆下来:
用 %10 取最后一位,存储或输出
再用10 删最后一位(移除最后一位)
代码:
//拆数
int z,i=1,a[10001];//z为要拆掉数,a数组存储拆完的数,i计位
while(z!=0){ //直到0结束
a[i]=z%10; //用 %10 取最后一位,存储
z/=10; //用10 删最后一位(移除最后一位)
i++; //位数++
}i--; //最后一位没有数i--
然后再判断数位上有没有3就行了。
完整代码如下(注释是我自己写的):
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt=0;
int f(int x){
//拆数 基本上用传统的while拆数就行了
int z=x,i=1,a[10001];//因为 (0≤n≤m≤10^5)所以数组要开大一点
while(z!=0){
a[i]=z%10;
z/=10;
i++;
}i--;
//记录数位上3的个数
int c=0;
for(int k = 1;k <= i;k++)if(a[k] == 3)c++;
return c;
}
int main(){
cin >> n >> m;
for(int i = n;i <= m;i++){
cnt+=f(i);
}
cout << cnt;
return 0;
}