某个数字x在另一个数字A中出现的次数

令Xi为数字A在第i位上的数字,y为x在A的第i位出现的次数,有以下规律:

当x<Xi时, y等于第i位左边一位的数字加1再乘以10的i-1次方;

当x=Xi时,y等于第i位左边一位的数字乘以10的i-1次方再加上A对10的(i-1)次方求余数再加1;

当x>Xi时,最简单,y等于第i位左边一位的数字乘以10的i-1次方.

程序实现,用的是1,需要注意的是pow的返回值是double,需要再前面加上(int)使其转换为int类型的值.

#include<math.h>
#include<iostream>
using namespace std;
int NumberOf1Between1AndN_Solution(int n)
{
		int total = 0;
		for (int i = 1; (int)pow(10, i - 1)<=n; i++)
		{
			int Xi = (n / (int)pow(10, i - 1)) % 10;
			cout << Xi << endl;
			if (1<Xi)
				total += (1 + n / (int)pow(10, i))*(int)pow(10, i - 1);
			else if (Xi == 1)
				total += (1 + n % (int)pow(10, i - 1) + n / (int)pow(10, i)*(int)pow(10, i - 1));
			else
				total += n / (int)pow(10, i)*(int)pow(10, i - 1);
		}
		return total;
}
int main()
{
	int x = NumberOf1Between1AndN_Solution(21651);
	cout << x;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_40736096/article/details/79678162