每次提交我总是得到错误的答案。请帮我解决代码。
每次提交的邮件只有wrong answer
我尝试了所有极端情况和特殊输入,并且代码似乎可以正常工作,但是提交不被接受。
#include <stdio.h>
#include <stdbool.h>
int getLength(long long x) {
int length = 0;
while (x != 0) {
x = x / 10;
length++;
}
return length;
}
bool even(long long x) {
int checkv = 0;
int pal = x;
int con = 0;
int length = getLength(pal);
length = length / 2;
while (length--) {
con = pal % 10;
checkv = checkv * 10 + con;
pal = pal / 10;
}
if (pal == checkv)
return true;
else
return false;
}
bool odd(long long x) {
int checkv = 0;
int pal = x;
int con = 0;
int length = getLength(pal);
length = length / 2;
while (length--) {
con = pal % 10;
checkv = checkv * 10 + con;
pal = pal / 10;
}
pal = pal / 10;
if (pal == checkv)
return true;
else
return false;
}
bool checkPal(long long x) {
int length = getLength(x);
if (length % 2 == 0)
return even(x);
else
return odd(x);
}
void getPal(long long x) {
long long pal = x + 1;
bool again = true;
while (again) {
if (checkPal(pal))
again = false;
else
pal++;
}
printf("%lli\n", pal);
}
void main() {
int n;
scanf("%d", &n);
long long a[n];
int i = 0;
while (n--) {
scanf("%lli", &a[i]);
getPal(a[i]);
i++;
}
}
我认为问题出在输入上,即我将输入读为long long
,但实际输入可能已超出此限制。
答案 0 :(得分:1)
注意您的编译器警告。
new_regex = r'\w+\_+\w+\b'
通过将其分配给bool even(long long x){
int checkv = 0;
int pal = x; // compiler warning here
int con = 0; // used to take value from pal
,您将立即失去long long x
中的重要性。同样的错误也存在于另一个函数中:
int pal
答案 1 :(得分:0)
您的方法有点慢,对于非常大的数字可能需要太长时间,最多40亿次迭代...您应该将数字分成两半,将数字的高位数映射为低位数。如果结果数较大,则发现下一个回文,如果没有,则增加左侧部分并再次镜像。而已。很快!