-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path007_ReverseInteger.c
75 lines (66 loc) · 1.1 KB
/
007_ReverseInteger.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//8.42%
int reverse(int x) {
//Check boundary conditions
int valX = x;
//Consider INT_MAX && INT_MIN
#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000
if(x == INT_MIN)
return 0;
if(x < 0)
valX = -x;
if(valX < 10)
return x;
//Main routine
long long rstX = 0;
while(valX)
{
int unitX = valX % 10;
rstX *= 10;
rstX += unitX;
valX /= 10;
}
if(rstX <= INT_MAX)
{
if(x > 0)
return (int)rstX;
else
return -(int)rstX;
}
else
return 0;
}
//24.6%
int reverse001(int x) {
//Check boundary conditions
int valX = x;
//Consider INT_MAX && INT_MIN
unsigned intMax = (unsigned)(~0) >> 1;
unsigned intMin = intMax + 1;
if(x == intMin)
return 0;
if(x < 0)
valX = -x;
if(valX < 10)
return x;
//Main routine
long long unsigned rstX = 0;
while(valX)
{
int unitX = valX % 10;
rstX *= 10;
rstX += unitX;
valX /= 10;
}
if(rstX <= intMax)
{
if(x > 0)
return (int)rstX;
else
return -(int)rstX;
}
else if(rstX == intMin && x < 0)
return (int)rstX;
else
return 0;
}