代码包括两个题
1. 返回两个int型数中的较大者,不准用关系运算符,不准用if, while, for等语句
2. 一句代码求字符串长度

1 #include <iostream>
2 using namespace std ;
3
4 // return the sign of a number, 0 for '+', 1 for '-'
5 int signof(int num)
6 {
7 return unsigned(num) >> (sizeof(int) * 8 - 1) ;
8 }
9
10 // compare two numbers without using relational operators, return the max number
11 int MaxNum(int a, int b)
12 {
13 int p[2] = {a, b} ;
14 return p[signof(a - b)] ;
15 }
16
17 // one clause to return the length of a string
18 unsigned int StrLen(char *s)
19 {
20 return s == NULL || *s == '\0' ? 0 : StrLen(s + 1) + 1 ;
21 }
22
23 int main(void)
24 {
25
26 cout << MaxNum(10, -1) << endl ;
27
28 char *p = "hello world" ;
29 cout << StrLen(p) << endl ;
30
31 system("pause") ;
32 return 0 ;
33 }
2 using namespace std ;
3
4 // return the sign of a number, 0 for '+', 1 for '-'
5 int signof(int num)
6 {
7 return unsigned(num) >> (sizeof(int) * 8 - 1) ;
8 }
9
10 // compare two numbers without using relational operators, return the max number
11 int MaxNum(int a, int b)
12 {
13 int p[2] = {a, b} ;
14 return p[signof(a - b)] ;
15 }
16
17 // one clause to return the length of a string
18 unsigned int StrLen(char *s)
19 {
20 return s == NULL || *s == '\0' ? 0 : StrLen(s + 1) + 1 ;
21 }
22
23 int main(void)
24 {
25
26 cout << MaxNum(10, -1) << endl ;
27
28 char *p = "hello world" ;
29 cout << StrLen(p) << endl ;
30
31 system("pause") ;
32 return 0 ;
33 }
其实第一题也可以用一句代码实现
1 int MaxNum(int a, int b)
2 {
3 return (a - b) >> (sizeof(int) * 8 - 1) ? b : a ;
4 }
5
2 {
3 return (a - b) >> (sizeof(int) * 8 - 1) ? b : a ;
4 }
5
但凡要求用一句代码实现的题目,基本上都用到三目运算符或者递归