如果从左到右和从右到左读取十进制系统中的表示相同,则正整数称为回文。对于给定的正整数K不超过1000000位,写入大于K的最小回文值输出。始终显示数字而不带前导零。
输入
第一行包含整数t,即测试用例的数量。整数K在下一行中给出。
输出
对于每个K,输出大于K的最小回文。
实施例
输入: 2 808 2133
输出: 818 2222
我的代码在ideone上成功运行但是spoj显示“错误的ans”,任何人都可以建议我或纠正我错在哪里,这是我的代码;
#include<stdio.h>
int ifPalindrome(int n){
int r=0,k=0,a=n;
while((a%10)!=0){
r=a%10;
k=10*k+r;
a=a/10;
}
if(k==n)return 1;
return 0;
}
int main(){
int t,n;
scanf("%d",&t);
for(;t>0;t--){
scanf("%d",&n);
while(ifPalindrome(n)!=1){
n++;
}
if(ifPalindrome(n)==1)printf("%d\n",n);
}
return 0;
}
答案 0 :(得分:1)
您所犯的错误是您将n
存储在integer datatype
中......约束表示
K不超过1000000 位数(
digits
而不是number
)
integer
无法存储此类huge number
..因此您必须使用string
或character array
或integer array
来解决此问题问题...试试这个输入:
454646546546546546546546464646464646
你会意识到你错了