思路:getline获取一行字符串,之后利用字母范围,字母 - ‘a’('A') + 1,得到字母序号,求和,对求和结果用除二取余的方法对0和1计数
测试点0,4 :用string定义的要小心,输入的数据(测试点0和4)里有带空格的,所以这种情况下就不能只是单纯的用cin输入了(输入空格,Tab,回车则结束输入),而要用getline(cin,string变量名)。
测试点2:不能用do-while循环数0和1,只能用while(如果sum = 0,则会多数0的个数)
1 #include<iostream> 2 3 using namespace std; 4 5 int main() { 6 string s; 7 int sum = 0; 8 int one = 0, zero = 0; 9 getline(cin, s); 10 for (int i = 0; i < s.size(); ++i) { 11 if (s[i] <= 'z' && s[i] >= 'a') { //A~Z a~z两种情况 12 sum += s[i] - 'a' + 1; 13 } 14 else if (s[i] <= 'Z' && s[i] >= 'A') { 15 sum += s[i] - 'A' + 1; 16 } 17 } 18 while (sum > 0) { 19 if (sum % 2 == 0) one++; 20 else zero++; 21 sum /= 2; 22 } 23 cout << one << ' ' << zero; 24 return 0; 25 }