zoukankan      html  css  js  c++  java
  • 1057 数零壹 (20 分)C语言

    给定一串长度不超过 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
    

    思路

    • 首先整行读取,然后计算总和。
    • 若总和为0,也就是什么都不输入,此时0的个数为0。(测试点3)
    • 总和不为0,使用辗转相除法,记录0和1的个数。
    #include <stdio.h>
    int main(){
    	char c;
    	int sum=0,count[2]={0};
    	while((c=getchar()) != '
    '){
    		if(isalpha(c)){//判断输入是否为英文
    			sum += tolower(c)-'a'+1;//字母转换成小写,累加求和
    		}
    	}
    	for(sum;sum;sum>>=1){
    		count[sum&1]++;
    	}
    	printf("%d %d",count[0],count[1]);
    	return 0;
    } 
    
    欢迎查阅
  • 相关阅读:
    java-day21
    java-day20
    java-day19
    java-day18
    java-day17
    java-day16
    java-day15
    java-day14
    python-day06
    java-day13
  • 原文地址:https://www.cnblogs.com/gh110/p/12158194.html
Copyright © 2011-2022 走看看