天梯赛 L1-003. 个位数统计

L1-003. 个位数统计

时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越
题目描述
给定一个k位整数N = dk-110k-1 + … + d1101 + 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
题目网址:(https://www.patest.cn/contests/gplt/L1-003)
题意:
输入一个不超过1000位的正整数N;统计每种不同的个位数字出现的次数,并以D:M的格式在一行中输出该位数字D及其在N中出现的次数M,要求按D的升序输出。
思路:
第一眼看到这个题的时候想的是用通过取余数的方法把数分离,但这个数是太大了,所以用字符串来表示是最好的了;然后把字符串类型数字化处理就行了,D的升序输出用个循环使D慢慢增加就行了。
代码:

#include<string>//string头文件声明
#include<iostream>//C++头文件声明
using namespace std;
int main(int argc,char* argv[])
{
    string s;//创建string对象
    char ss[1000];//定义字符串ss
    int i,n,j;
    cin>>ss;//输入字符串ss
    s=ss;//string对象赋值
    for(j=0;j<=9;j++)//按D的升序输出所用
    {
        n=0;
        for(i=0;i<s.length();i++)//s.length返回string的长度
        {
            if(s[i]-'0'==j)//string类型数字化处理
                n++;
        }
        if(n!=0)
            cout<<j<<":"<<n<<endl;//输出格式j:n;回车换行
    }
    return 0;
}

map

#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
    map<char,int> m;
    string s;
    cin>>s;
    for(int i=0;i<10;i++)   //插入键值'0'-'9'数据初始值都为0
    {
        m[i+'0']=0;
    }
    for(int i=0;i<s.length();i++)
    {
        m[s[i]]++;  //键值对应的数据++
    }
    map<char,int>::iterator it;
    for(it=m.begin();it!=m.end();it++)
    {
        if((*it).second!=0) //数据不为0输出
            cout<<(*it).first<<":"<<(*it).second<<endl;
    }
    return 0;
}

运行结果:
个位数统计1
个位数统计2

总结:
碰到数比较大的并要把数分离开,利用字符串是个很好的办法,再次感受到到了C++的好处。
以后继续努力!加油!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值