给定一串长度不超过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
可以说是贼奇怪了
啊我的if错在哪里啊啊啊 为什么什么字符都会去加 明明我有写限定啊啊啊啊
//心痛的贴上自己不知道为什么错了的错误代码 #include<iostream> #include<string.h> using namespace std; int add(char*); int main(){ char str[100001]; cin.get(str, 100001); int length = strlen(str); int a[2] = { 0, 0 }; int sum = add(str); for (int i = 0; sum >= 1; i++) { int temp; temp = sum % 2; if (temp == 0) a[0]++; else a[1]++; sum = sum / 2; } cout << a[0] << " " << a[1]; cin.get(); cin.get(); return 0; } int add(char* a) { int length; length = strlen(a); int sum = 0; for (int i = 0; i < length; i++) { if ('A' <= a[i] <= 'Z') { sum += a[i] - 'A' + 1; } if ('a' <= a[i] <= 'z') { sum += a[i] - 'a' + 1; } } return sum; }
//请告诉我我和大佬的代码之间到底差个啥 #include<stdio.h> #include<ctype.h> #include<string.h> #define MAX 100000 int add(char* a); int main() { int num0 = 0, num1 = 0, check, sum; char input[MAX]; gets_s(input); sum = add(input); while (sum != 0) { check = sum % 2; if (check == 1)num1++; else num0++; sum /= 2; } printf("%d %d", num0, num1); return 0; } int add(char* a) { int sum = 0; int len = strlen(a); for (int i = 0; i < len; i++) { if (isupper(a[i])) { a[i] += 'a' - 'A'; } if (islower(a[i])) { sum += (int)(a[i] - 'a' + 1); } } return sum; }