问题描述:
设准回文数是这样一个数,在它上面加上一些前导零(可能没有)就产生了一个回文字符串。
字符串t称为回文,如果它从左到右和从右到左读取相同的内容。
例如,数字131和2010200是准回文的,它们可以分别转换为字符串“131”和“002010200”,这是回文。
给你一些整数x。检查它是否是一个准回文数。
输入:
第一行包含一个整数x(1 ≤ x ≤ 109)。这个数字没有任何前导零。
输出:
如果数字x是准回文的,则打印“是”。否则,打印“否”(不带引号)。
举例:
输入:
131
输出
YES
输入
320
输出
NO
输入
2010200
输出
YES
我的代码
#include<iostream>
#include<cmath>
using namespace std;
double t;
int n;
int k,p,s,p2,w1,w2;
int m=0;
int main(){
int count=0; //用来判断几位数
cin>>t; //输入数
if((int)t!=t) cout<<"NO"<<endl; //判断是否为整数,若是小数就返回NO
else if((int)t==t){
n=(int)t; //是整数
if(n<1) cout << "NO"<<endl; //题目要求输入的数大于1,
if(n>=1){
s=n;
w1=n;
while(s/10){
count++;
k=s%10;
s/=10;
}
count++;
k=s%10;
if(count==1) {
cout << "NO"<<endl;
}
else if(count!=1){
for(int i=count;i>0;i--){
p+=n%10*(int)pow((float)10,(int)i-1);
n/=10;
}
count=0;
if(p==w1) cout << "YES"<<endl; //w1等于输入的数,p是去掉后面尾巴上0的逆序数
if(p!=w1){ //判断是否为准回文数
s=p;
w2=p;
while(s/10){
count++;
k=s%10;
s/=10;
}
count++;
k=s%10;
for(int i=count;i>0;i--){
p2+=p%10*(int)pow((float)10,(int)i-1);
p/=10;
}
if(p2==w2) cout << "YES"<<endl; //是准回文数
else if(p2!=w2) cout << "NO"<<endl; //不是准回文数
}
}
}
}
return 0;
}
然后题目给的例子我都测试通过了,小数,负数,个位数都考虑到了,不知道为什么oj上就说wrong answer。求大佬帮忙看看