PAT Basic 1057
阿新 • • 發佈:2018-08-12
先後 baseline ext 二進制表示 %d mes sum urn length
1057 數零壹
給定一串長度不超過 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
題解:這道題可以按照字符串讀入,之後得出其N的大小,再將N轉為2進制,在轉換過程中,只需記錄過程中有多少個0和1出現即可,並不需要保存最後的二進制數。
代碼如下:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int main(){ 6 string a, b; 7 int num1 = 0, num0 = 0, k; 8 long long int sum = 0; 9 getline( cin,a); 10 for( int i = 0; i < a.length(); i++){ 11 if( toupper(a[i]) >= ‘A‘ && toupper(a[i]) <= ‘Z‘){ 12 sum += ( toupper(a[i]) - ‘A‘ + 1); 13 } 14 } 15 while(sum){ 16 k = sum%2; 17 sum /= 2; 18 if( k == 0) 19 num0++; 20 else if( k == 1) 21 num1++; 22 } 23 printf("%d %d",num0,num1); 24 return 0; 25 }
PAT Basic 1057