PAT Basic 1057. 數零壹(20)(C語言實現)

weixin_34321977發表於2017-05-04

我的PAT系列文章更新重心已移至Github,歡迎來看PAT題解的小夥伴請到Github Pages瀏覽最新內容。此處文章目前已更新至與Github Pages同步。歡迎star我的repo

題目

給定一串長度不超過 的字串,本題要求你將其中所有英文字母的序號(字母 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。

輸入格式:

輸入在一行中給出長度不超過 、以回車結束的字串。

輸出格式:

在一行中先後輸出 0 的個數和 1 的個數,其間以空格分隔。

輸入樣例:

PAT (Basic)

輸出樣例:

3 4

思路

逐字元讀取,邊讀邊累加。

程式碼

最新程式碼@github,歡迎交流

#include <stdio.h>
#include <ctype.h>

int main()
{
    char c;
    int sum = 0, count[2] = {0};

    while((c = getchar()) != '\n')
        if(isalpha(c))
            sum += tolower(c) - 'a' + 1;

    for(; sum; sum >>= 1)
        count[sum & 1]++;

    printf("%d %d", count[0], count[1]);

    return 0;
}

相關文章