问题描述:
设准回文数是这样一个数,在它上面加上一些前导零(可能没有)就产生了一个回文字符串。
字符串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。求大佬帮忙看看
其实不用考虑小数和负数。。。因为题目中保证x为证书,并且1≤x≤109
整数
应该是部分正确吧。目前只看出了第25行if里输出错了,因为一位数肯定是回文数。献上两种方法吧:
先分析一下题目:加前导零,只在结尾有0的时候才能起作用,所以末尾0可以去掉。然后直接判断回文就可以了。
法1:用字符串
#include <bits/stdc++.h>
using namespace std;
bool judge(string s) { // 判断字符串是否为回文
for (int i = 0, j = s.size() - 1; i < j; ++i, --j) {
if (s[i] != s[j]) {
return false;
}
}
return true;
}
int main() {
string s; cin >> s;
int pos;
for (int i = s.size() - 1; i >= 0; --i) { // 找到从末尾开始第一个不是0的位置
if (s[i] != '0') {
pos = i; break;
}
}
if (judge(s.substr(0, pos + 1))) { // pos - 0 + 1 = pos + 1
cout << "YES\n";
} else {
cout << "NO\n";
}
return 0;
}
法儿:用数
#include <bits/stdc++.h>
using namespace std;
bool judge(int n) { // 判断数是否回文
int tmp = n, sum = 0;
while (tmp) {
sum = sum * 10 + tmp % 10; tmp /= 10;
}
return sum == n;
}
int main() {
int n; cin >> n;
while (n % 10 == 0) { // 去掉末尾0
n /= 10;
}
if (judge(n)) {
cout << "YES\n";
} else {
cout << "NO\n";
}
return 0;
}