刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

面试题

请编写一段C/C++代码,计算在从1到n的正数中数字1出现的总次数。

使用微信搜索喵呜刷题,轻松应对面试!

答案:

解答思路:

要计算从 1 到 n 的正数中数字 1 出现的次数,我们可以按照数位来分别计算。具体来说,我们可以计算每一位上出现 1 的次数,然后将这些次数相加。例如,在个位、十位、百位等位置上,数字 1 出现的概率是不同的。因此,我们需要根据数字的位数和当前位数的值来计算 1 的出现次数。我们可以使用 C/C++ 的循环和数学计算来实现这个功能。

最优回答:

以下是使用 C++ 实现的一个示例代码:

#include <iostream>
using namespace std;

int countOnes(int n) {
    int count = 0; // 用于记录数字 1 出现的次数
    int temp = n; // 用于临时存储数字 n 的值
    while (temp > 0) { // 循环遍历数字的每一位
        count += (temp % 10 == 1) + (temp / 10 * (n % 10 == 1)); // 计算当前位上出现数字 1 的次数
        temp /= 10; // 移动到下一位
        n /= 10; // 更新 n 的值,保证 n 的位数不变
    }
    return count; // 返回结果
}

int main() {
    int n; // 输入的数字范围的上限
    cout << "请输入一个正整数 n:" << endl;
    cin >> n;
    cout << "从 1 到 " << n << " 的正数中数字 1 出现的次数为:" << countOnes(n) << endl;
    return 0;
}

解析:

这个问题涉及到数字位操作和概率计算。在实现过程中,我们使用了循环来遍历数字的每一位,并且使用了模运算(%)和整除运算(/)来进行位操作。此外,还需要理解不同位数上数字出现的概率是不同的,需要根据具体的位数和数值来计算。这种按位计算的方法在解决其他涉及数字统计的问题时也有广泛的应用。同时,这个问题也涉及到算法的时间复杂度分析,对于较大的 n 值,算法的效率会受到影响。在实际应用中,还需要考虑算法的效率和优化。
创作类型:
原创

本文链接:请编写一段C/C++代码,计算在从1到n的正数中数字1出现的总次数。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share