演算法學習之路|數零壹

kissjz發表於2018-02-27

給定一串長度不超過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
解題思路

先求出有幾個字母

在求出數的二進位制

計算0,1的個數。

#include<iostream>
using namespace std;
int main(){
    char ch;
    int sum=0;
    while((ch=getchar())!=`
`){
        
        if(ch>=`a`&&ch<=`z`)
            sum+=ch-`a`+1;
        else if(ch>=`A`&&ch<=`Z`)
            sum+=ch-`A`+1;
    }
    int one=0,zero=0;
    while(sum>0){
        if(sum%2==1)
            one++;
        else if(sum%2==0)
            zero++;
        sum/=2;
    }

    cout<<zero<<" "<<one;
}


相關文章