做了LeetCode上reverse integer,用了栈,虽然已经accepted,但感觉还能改进,这题比较坑的地方就是一个数颠倒过来时有可能会越界,需要判断越界条件,同时输入有可能是负数。
代码如下,如后面有所改进,会重新发布
#include <stdio.h>
#include <math.h>
typedef struct{
int data[11];
int top;
}integer;
int reverse(int x) {
int y = x;
int xSize = 0;
while(y >= 1 || y <= -1){
y = y/10;
xSize ++;
}
printf("xSize = %d\n", xSize);
integer z, w;
z.top = 0;
w.top = 0;
int i;
long j = 1;
for(i = 0;i < xSize;i ++){
z.top ++;
z.data[z.top] = x/j%10;
j = j * 10;
}
for(i = 0;i < xSize;i ++){
w.top ++;
w.data[w.top] = z.data[z.top];
z.top --;
}
long result = 0;
j = pow(10, xSize - 1);
for(i = 0;i < xSize;i ++){
result = result + w.data[w.top]*j;
w.top --;
j = j/10;
}
if(result > 2147483647 || result < -2147483648 || (result<0&&x>0)||(result>0&&x<0)){
return 0;
}
return (int)result;
}
觉得这次的不是很完美,虽然用栈可以做,其实队列也应该可以。