题目描述
给一个0~9的整数k和一个不知大小的整数N,求0~N之间含有多少个k。例如1的话,11算是两个。
解题思路
思路一:循环0~N,在给次循环里用%运算得出每位的数进行比较,然后得出个数。
思路二:通过循环将0~N转换成一个string字符串,然后依次从字符串中取出每一位进行比较计数即可。
代码实现
#include <iostream>
#include <string>
using namespace std;
/**
* 统计0~N里面k出现的个数,k:0~9
* 解题思路:将所有的数字存储成一个字符串,然后在于k比较即可
* @param k
* @param n
* @return
*/
int digitCounts(int k, int n) {
string str = "";
//注意需要将k转换成ASCII,因为字符比较默认是比较ASCII的值
char ch = k + '0';
int count = 0;
for (int i = 0; i <= n; i++) {
//to_string(n) 将数字转换成字符串
str = str + to_string(i);
}
for (int i = 0; i < str.length(); i++) {
if(str[i] == ch){
count++;
}
}
return count;
}
int main() {
int count = digitCounts(4, 500);
cout << count << endl;
return 0;
}
个人记录
- c++中字符比较是使用ASCII比较的,需要将数字进行转换
- 将数字转换成字符串:to_string()
- c++需要把实现函数放在main()之前