Lintcode 3、统计数字

题目描述

给一个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;
}

个人记录

  1. c++中字符比较是使用ASCII比较的,需要将数字进行转换
  2. 将数字转换成字符串:to_string()
  3. c++需要把实现函数放在main()之前
发布了28 篇原创文章 · 获赞 5 · 访问量 2191

猜你喜欢

转载自blog.csdn.net/qq_40307379/article/details/104909431
今日推荐