【问题描述】对于1到n的所有自然数,计算数字x(x是0-9之间的数字)出现的次数总和。
例如:n=11,x=1,则输出4。因为1,2,3,4,5,6,7,8,9,10,11这个序列中1这个数字总共出现了4次。
【输入形式】一个整数n(n <= 100000)和一个整数x(0<=x<=9)
【输出形式】一个整数,表示x在1..n这个序列中出现的次数总和。
【样例输入】
11 1
【样例输出】
4
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n, x,flag=0;
cin >> n>>x;
for (int i=1; i <= n; i++)
{
int c = i;
while (c)
{
int k = c% 10;
if(k==x)
flag++;
c=c / 10;
}
}
cout<<flag;
return 0;
}
问题1.首先遇到了for循环取值i的问题,for(int i=1;;)循环中包含while(i)时会出现循环取值i=1的情况,解决方法:使用while循环时将遍历计数值i传给新的变量,在while中使用这个新的变量
for (int i=1; i <= n; i++)
{
int c = i;
while (c)
{
}
}
问题2.进入while后,通过c%10取得个位上的数字进行判断,但是此时c的值会改变,无法c/10;故需要int k = c;判断k==x;(专门通过k来取个位上的数字)再通过c/10;将个位数字删除,向右移位,以此循环,循环终止条件c=0(1/10=0之后跳出循环)
思路:当需要进行重复多次的操作时(给出很长位0-9000000数的数字,读取个位数字,再删除个位数字),应该首先考虑设置循环!