1021. 个位数统计 (15)
题目:
给定一个k位整数N = dk-1*10k-1 + … + d1*101 + d0 (0<=di<=9, i=0,…,k-1, dk-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
思路:
1.由于输入数据位数很大,所以所以考虑用字符数组存储和接收输入
char N[1000];
gets(N); //读取字符串
2.将字符转化为对应数字,并更新对应的计数器
for(int i = 0; i<len; i++)
{
num = N[i] - '0'; //将字符串转化为整数
D[num]++; //对应计数器自增
}
代码:
/**
* @tag PAT_B_1021
* @authors R11happy (xushuai100@126.com)
* @date 2016-8-20 21:45-21:57
* @version 1.0
* @Language C++
* @Ranking 360/1936
* @function 个位数统计
*/
#include <cstdio>
#include <cstdlib>
#include <cstring>
int main(int argc, char const *argv[])
{
int D[10] = {0};
int num = 0;
char N[1000];
gets(N); //读取字符串
int len = strlen(N);
for(int i = 0; i<len; i++)
{
num = N[i] - '0'; //将字符串转化为整数
D[num]++; //对应计数器自增
}
for(int i = 0; i<10; i++)
{
if(D[i]) printf("%d:%d\n", i, D[i]); //注意,输出的是D[i]而不是N[I]
}
return 0;
}
收获:
1.位数太多要考虑用字符数组存储,再逐位将字符转化为对应数字
2.处理字符串常用
char N[1000];
gets(N); //读取字符串
int len = strlen(N);