PTA:1021 个位数统计 (15分)

    技术2025-09-18  71

    1021 个位数统计 (15分)

    给定一个 k 位整数 N=d​k−1​​10​k−1​​+⋯+d​1​​10​1​​+d​0​​(0≤d​i​​≤9, i=0,⋯,k−1, d​k−1​​>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。

    输入格式:

    每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。

    输出格式:

    对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。

    输入样例:

    100311

    输出样例:

    0:2 1:3 3:1

    有错误代码(只能通过前两个测试点),原因是1000位的数值超出long long范围

    #include <bits/stdc++.h> using namespace std; int main() { long long inum; freopen("abcdcnt.in", "r", stdin); while (cin >> inum) { int ilist[10]; for (int i = 0; i < 10; i++) //初始化统计数组 { ilist[i] = 0; } while (inum) { int itemp = inum % 10; ilist[itemp]++; inum = inum / 10; } for (int i = 0; i < 10; i++) { if (ilist[i] != 0) { cout << i << ":" << ilist[i] << endl; } } } }

    AC代码,使用string存储1000位的输入

    #include <bits/stdc++.h> using namespace std; int main() { // long long inum; string str; freopen("abcdcnt.in", "r", stdin); while (cin >> str) { int ilist[10]; for (int i = 0; i < 10; i++) //初始化统计数组 { ilist[i] = 0; } for (int i = 0; i < str.size(); i++) { ilist[str.at(i) - '0']++; //将字符'0'~'9'转化为数字0~9,如'1'-'0'=1 } // while (inum) // { // int itemp = inum % 10; // ilist[itemp]++; // inum = inum / 10; // } for (int i = 0; i < 10; i++) { if (ilist[i] != 0) { cout << i << ":" << ilist[i] << endl; } } } }
    Processed: 0.014, SQL: 9