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 的个数,其间以空格分隔。
PAT (Basic)
3 4
【我的代码】
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 }
【思路】