#include using namespace std; int main(){ int n=0,x=0; int number[6]={0}; scanf("%d %d",&n,&x); int a[1000010]; for( int i=0;i<n;i++){ a[i]=i+1; } for(int i=0;i<n;i++){ while(a[i]!=0){ if(a[i]%10==x){ number[0]++; } a[i]=a[i]/10; } } cout<<number[0]; return 0; } 两个多月没写了,忘得差不多了,这题写的时候while(a[i]!=0){ a[i]=a[i]%10; if(a[i]==x){ number[0]++; } a[i]=a[i]/10; 这个就出现问题了在10的时候直接为零了,看了好一会是变量问题,主要是a=a/10会使a的值改变会使循环变量改变把a[i]=a[i]%10的前一个换个变量if的也换个变量又看看大佬们的觉得更简单。 感觉对数的每个数的提取和使用很经常总结一下 对任意实数提取他的每一位: b=a%10; a=a/10; 判断的话就是把b带入 if(a[i]%10==x){ number[0]++; } a[i]=a[i]/10;