做了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; 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; }觉得这次的不是很完美,虽然用栈可以做,其实队列也应该可以。