我在C中写了一些有用的函数。其中一个是isPalindrome()
。
我想确定一个数字是否是回文,我应该......
我想出了......
int isPalindrome(int num) {
int places[100];
int i = 0;
while (num > 0) {
places[i++] = num % 10;
num /= 10;
}
int j = 0;
while (i >= 0 && places[j++] == places[--i]) {
}
return i == -1;
}
这一般是怎么做的?
我自己在学习C语,虽然我可以告诉我的代码何时编译并且不需要整天工作,但我没有任何专家眼睛告诉我如果我走在正确的轨道上。
那么,对我的代码有任何改进或建议吗?
非常感谢!
答案 0 :(得分:5)
您只需在i > j
时循环播放。 i <= j
后,您只是第二次检查所有字符。
答案 1 :(得分:2)
尽管在下面使用内联++
和--
运算符可能看起来很聪明:
while (i >= 0 && places[j++] == places[--i]) {
}
如果将放在循环体中,您的代码将更容易阅读:
while (i >= 0 && places[j] == places[i-1]) {
j++;
i--;
}
这样,代码的读者就不必考虑在条件测试中更改i
和j
的值可能产生的副作用。可能对编译代码的速度没有可测量的影响(但是,如果性能对此函数很重要,则应该与编译器一起检查)。
此外,您还有一个错误,如果places[-1]
您将访问i == 0
。
答案 2 :(得分:1)
我只是使用sprintf
“将字符串转换为数字”:
char places[100];
sprintf(places, "%i", num);
i = strlen(places);
答案 3 :(得分:1)
在java中
static boolean isPalindrome(String p) {
return p.equals(new StringBuilder(p).reverse().toString());
}
在c ++和c
中int IsPalindrome(char *string) {
int bottom = 0, top;
top = strlen(string) - 1;
while(bottom < top && string[bottom] == string[top]) {
++bottom;
--top;
}
return (bottom >= top ? 1:0);
}
注意,如果您需要为数字输入执行此操作,则需要编写 itoa 函数。或者使用(link)。
这是如何完成的。这也适用于所有基地而不仅仅是10个。