前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1057 数零壹 (20 分)

1057 数零壹 (20 分)

作者头像
可爱见见
发布2019-10-18 14:56:50
3420
发布2019-10-18 14:56:50
举报
文章被收录于专栏:卡尼慕卡尼慕

1057 数零壹 (20 分)

给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0、多少 1。例如给定字符串 PAT (Basic),其字母序号之和为:16+1+20+2+1+19+9+3=71,而 71 的二进制是 1000111,即有 3 个 0、4 个 1。

输入格式:

输入在一行中给出长度不超过 105、以回车结束的字符串。

输出格式:

在一行中先后输出 0 的个数和 1 的个数,其间以空格分隔。

输入样例:

代码语言:javascript
复制
PAT (Basic)

输出样例:

代码语言:javascript
复制
3 4

【我的代码】

代码语言:javascript
复制
 1 // 1057 数零壹 (20 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
 2 //
 3
 4 #include <iostream>
 5 #include <string>
 6 #include <algorithm>
 7 using namespace std;
 8 int main()
 9 {
10    //输入
11    string inp;
12    getline(cin, inp);
13    int i = 0, count = 0;
14    //计算和
15    for (; i < inp.size(); i++) {
16        if (inp[i] >= 'A' && inp[i] <= 'Z')
17            count += inp[i] - 64;
18        else if (inp[i] >= 'a' && inp[i] <= 'z')
19            count += inp[i] - 96;
20    }
21    //当什么都不输入的时候,0的个数为0
22    if (count == 0) {
23        cout << "0 0";
24        return 0;
25    }
26    //转换二进制并且记录0,1的数量
27    int count1 = 0, count0 = 0;
28    int xushu;
29    while (count / 2 != 0) {
30        if (count % 2 == 0)
31            count0++;
32        if (count % 2 == 1)
33            count1++;
34        count /= 2;
35    }
36    if (count % 2 == 0)
37        count0++;
38    if (count % 2 == 1)
39        count1++;
40    cout << count0 << " " << count1 ;
41    return 0;
42 }

【思路】

  1. 首先整行读取,然后计算总和。
  2. 若总和为0,也就是什么都不输入,此时0的个数为0。(测试点3)
  3. 总和不为0,使用辗转相除法,记录0和1的个数。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡尼慕 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入格式:
  • 输出格式:
  • 输入样例:
  • 输出样例:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档