PAT 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 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<ctype.h>
 5 #include<math.h>
 6 
 7     
 8 int main(){
 9     char a[100010];
10     gets(a);
11     long sum = 0;
12     int lena = strlen(a);
13     for(int i=0;i<lena;i++){
14         a[i] = tolower(a[i]);
15         if(a[i]>='a'&&a[i]<='z'){
16             sum = a[i]-'a'+1+sum;
17         }
18     }
19     int temp;
20     int n1=0,n2=0;
21     while(sum){
22         temp = sum%2;
23         if(temp)
24             n2++;
25         else
26             n1++;
27         sum = sum/2;
28     }
29     printf("%d %d",n1,n2);
30 } 

 

posted @ 2017-02-14 00:02  来一点音乐  阅读(453)  评论(0编辑  收藏  举报