双耳兔叽 2021-01-12 16:52 采纳率: 0%
浏览 20

一个简单的判断准回文数和回文数的代码,自己电脑上通过了,oj一直通不过

问题描述:

设准回文数是这样一个数,在它上面加上一些前导零(可能没有)就产生了一个回文字符串。

字符串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。求大佬帮忙看看

  • 写回答

3条回答 默认 最新

  • 蒟蒻一枚 2021-01-12 17:07
    关注

    其实不用考虑小数和负数。。。因为题目中保证x为证书,并且1≤x≤109

    评论

报告相同问题?

悬赏问题

  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题