【C语言】整数每一位数字出现次数

发布于:2024-12-08 ⋅ 阅读:(117) ⋅ 点赞:(0)

提相信你是最棒哒!!!


题目描述

给出两个整数 M 和 N,求在序列[M, M + 1, M + 2,…, N - 1, N]中每一个数码出现了多少次。

输入格式

输入两个整数 M 和 N 。

输出格式

输出十个用空格分开的整数,分别表示数码 0…9 在序列中出现的次数。

输入样例1
129 137 
输出样例1
1 10 2 9 1 1 1 1 0 1 
数据范围

1 <= m <= n <= 106


题目代码

法一解析版C

#include <stdio.h> 

int main() 
{
    int i, j, m, n; 
    int a[10] = { 0 }; // 定义一个整型数组a,大小为10,并初始化所有元素为0。这个数组用于存储0到9每个数字出现的次数。(main函数里<局部变量>不会自动给数组初始化为0 但可以在main函数外边<全局变量>可以自动初始化为0)

    scanf("%d%d", &m, &n); // 从标准输入读取两个整数m和n,它们分别代表要计算数字出现次数的范围的起始和结束值。

    for (i = m; i <= n; i++) // 从m到n(包括m和n)遍历每一个整数。
    {
        j = i; // 将当前整数i赋值给j。
        while (j > 0) // 当j大于0时,循环继续。
        {
            a[j % 10]++; // 计算j的个位数,并增加数组a中对应数字的计数。例如,如果j是123,那么j % 10的结果就是3,a[3]就会增加1。
            j /= 10; // 将j除以10,去掉个位数,准备计算下一位。
        }
    }

    for (i = 0; i < 10; i++) // 遍历数组a,输出每个数字出现的次数。
        printf("%d ", a[i]); // 后面跟一个空格。

    return 0; 
.
}

简洁版

#include <stdio.h>
int main()
{
	int i, j, m, n;
	int a[10] = { 0 };
	scanf("%d%d", &m, &n);
	for (i = m; i <= n; i++)
	{
		j = i;
		while (j > 0) {
			a[j % 10]++;
			j /= 10;
		}
	}
	for (i = 0; i < 10; i++)
		printf("%d ", a[i]);
	return 0;
}

法二解析版C++

#include <bits/stdc++.h> // 包含一个非标准的头文件,它实际上包含了C++标准库的所有头文件,常用于竞赛编程。

using namespace std; // 使用标准命名空间,这样可以直接使用cin、cout等而不需要std::前缀。

using ll = long long; // 定义一个别名ll代表long long类型,但在这段代码中并没有使用到。

int a[10]; // 定义一个整型数组a,大小为10,用于存储0到9每个数字出现的次数。

int main() { // 主函数的开始。
    int m, n; // 定义两个整型变量m和n,用于存储用户输入的两个整数。
    cin >> m >> n; // 从标准输入读取两个整数m和n,它们分别代表要计算数字出现次数的范围的起始和结束值。

    for (int i = m; i <= n; i++) { // 从m到n(包括m和n)遍历每一个整数。
        int j = i; // 将当前整数i赋值给j。
        while (j > 0) { // 当j大于0时,循环继续。
            a[j % 10]++; // 计算j的个位数,并增加数组a中对应数字的计数。例如,如果j是123,那么j % 10的结果就是3,a[3]就会增加1。
            j /= 10; // 将j除以10,去掉个位数,准备计算下一位。
        }
    }

    for (int i = 0; i < 10; i++) { // 遍历数组a,输出每个数字出现的次数。
        cout << a[i] << " "; // 输出数字i出现的次数,后面跟一个空格。
    }

    return 0; // 主函数返回0,表示程序正常结束。
}

简洁版

#include <bits/stdc++.h>
int a[10];
int main() {
    int m, n;
    cin >> m >> n;
    for (int i = m; i <= n; i++) {
        int j = i;
        while (j > 0) {
            a[j % 10]++;
            j /= 10;
        }
    }
    for (int i = 0; i < 10; i++) {
        cout << a[i] << " ";
    }
    return 0;
}

总结

在C语言中,如果你在函数内部定义了一个静态存储期的变量(比如全局变量或者static修饰的局部变量),那么这些变量会被自动初始化为0。但是,如果你在函数内部定义了一个自动存储期的变量(即没有static修饰的局部变量),那么它们不会被自动初始化,它们的初始值是未定义的。


网站公告

今日签到

点亮在社区的每一天
去签到