PAT (Basic Level) Practice (中文) 1057 数零壹 (20分)

1.题目

给定一串长度不超过 10​5​​ 的字符串,本题要求你将其中所有英文字母的序号(字母 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。

输入格式:

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

输出格式:

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

输入样例:

PAT (Basic)

输出样例:

3 4

2.题目分析

itoa进制转换不是库里的函数,VS可以用,但是PTA不行……

自己直接算了

3.代码

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
string list;
int main()
{
	int sum = 0;
	getline(cin, list);
	for (int i = 0; i<list.length(); i++)
	{
		if (list[i] >= 'A'&&list[i] <= 'Z')
			sum += list[i] - 64;
		else if (list[i] >= 'a'&&list[i] <= 'z')
			sum += list[i] - 96;
	}
	int zero = 0, one = 0;
    while(sum>0)
	{
        if(sum%2==1)one++;
        else zero++;
        sum/=2;
    }
	printf("%d %d", zero, one);

}
原文地址:https://www.cnblogs.com/Jason66661010/p/12788934.html