1057 数零壹 (20分)

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 的个数,其间以空格分隔。注意:若字符串中不存在字母,则视为 N 不存在,也就没有 0 和 1。

输入样例:

PAT (Basic)
 

输出样例:

3 4


代码讲解:此题只是单纯的模拟,没有特别的解法




#include<stdio.h>
int main()
{
 char a[100005];
 gets(a);
 int i;
 int sum=0;
 for(i=0;a[i]!='\0';i++)
 {
  if(a[i]>='A'&&a[i]<='Z')
  sum+=a[i]-'A'+1;
  else
  if(a[i]>='a'&&a[i]<='z')
  sum+=a[i]-'a'+1;
  
  
 }
 int zero=0,one=0,r;
 while(sum!=0)
 {
  r=sum%2;
  if(r==0)
  zero++;
  if(r==1)
  one++;
  sum/=2;
  
 }
 printf("%d %d\n",zero,one);
 return 0;
}

posted @ 2020-11-08 23:01  罪梦者  阅读(87)  评论(0)    收藏  举报