描述

Tom is studing math these days. If there is a number X, whose binary form and decimal form are all palindrome numbers, Tom names it "Tom palindrome number". And Tom wants to know how many "Tom palindrome number" there are between N and M ? (1001,66,64446 are all palindrome number)

输入

Each test case starts with two integer N and M (1<=N<=M<=1000000).

输出

For each test case, you must print all Tom palindrome numbers between N and M, one line for each. After each test case you must print a blank line. And print nothing if there isn't any "Tom palindrome number" between N and M.

输入样例 1

1 5
2 2
5 10
10 40

输出样例 1

1
3
55
7
933

思路及踩坑:

字符串比较肯定不行,totring方法最多能用一次,如果所有数字都用tostring转的话就超时。

reverse函数不能用,会超时,手动for循环模拟reverse也会超时,字符串基本被ban了。

——————————

思路是先自己找出来范围内所有符合要求的数,存在一个数组里,然后输出符合要求的数就行了,一次运算解决所有问题。

全局数组ans存储所有符合要求的数。

Dealing函数:看一个数是不是符合题意。这里记得先存一下原来的数字,因为每次操作数字都比原来少了一半。先在里面开辟一个辅助数组v,然后计算该数字的二进制位,把每一位都存到数组v里;

检测v数组里对称位置的两个数是不是一样的,如果不是直接返回;

tostring一下原来的数字(这里只用了一次所以可以),在str中也仿照对数组的处理方式,检测这个数的十进制形式是不是符合条件,不符合直接返回;

如果两次返回都没有被执行,就说明这个数符合条件,加到ans里;

根据输入的数字,输出ans里满足条件的数

注意,ans可以自己先调试一下看看大小以及最大的数是多少,再修改,就不用循环1000000次了。

代码如下:

#include<string>
#include<iostream>
#include<vector>
using namespace std;vector<int> ans;
void Dealing(int x) {vector<int> v;//记录二进制数的每一位int i = 0;if (x == 1) {ans.push_back(1);return;}int x1 = x; //保留原始数据while (x) { //记录二进制数的每一位v.push_back(x % 2);x /= 2;i++;}for (int j = 0; j < i / 2; j++) { //不满足要求,退出if (v[j] != v[i - j - 1]) {return;}}string str = to_string(x1);int len = str.length();for (int i = 0; i < len / 2; i++) {//十进制比对,这里tostring可以用,不会超时if (str[i] != str[len - i - 1])return;else continue;}ans.push_back(x1);//如果在上面那么多比对中都没退出,说明确实是回文数,ans加进去
}
int main()
{for (int i = 1; i <= 585585; i++) {//为什么是585585,调试看出来的,耍点诡计Dealing(i);}int n, m;while (cin >> n >> m) {for (int i = 0; i < ans.size(); i++) {if (ans[i] >= n && ans[i] <= m) {cout << ans[i] << endl;}if (ans[i] > m) {break;}}cout << endl;}return 0;
}

北林oj-算法设计与分析-Tom palindrome number相关推荐

  1. 北林oj-算法设计与分析-Removing the Wall(C++,思路+代码)

    描述 There is a wall in Tom's garden, which is builded by N different bricks. Bricks may have differen ...

  2. 北林oj-算法设计与分析-Simple Count(C++,思路+代码)

    描述 Count how many numbers do not contain 4 or 7 in the N numbers from 1 to N. 输入 Each test case star ...

  3. 北林oj-算法设计与分析-Don‘t touch my cake(题意+代码)

    描述 A boy bought N different cakes someday. They were arranged randomly in a line given by permutatio ...

  4. 北林oj-算法设计与分析-A dice game(思路+代码)

    描述 One day, boy A and girl B are playing a dice game. First, they write a number between 1~6 in a pi ...

  5. 北林oj-算法设计与分析-Line up in the canteen(两种解法,附思路)

    描述 One day, there is a kind of new delicious food from one of the windows in the canteen. All studen ...

  6. 算法设计与分析:Minimum Number of Refueling Stops(Week 11)

    学号:16340008 题目:871. Minimum Number of Refueling Stops Question: A car travels from a starting positi ...

  7. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  8. C++ 算法设计与分析 地图着色问题(中国+美国)

    文章目录 中国+美国可选择地图着色问题 地图着色问题 解决方法 回溯法 队列 代码展示 美国地图着色 代码(c++) 结果 中国+美国地图着色 代码(c++) 结果 可视化 中国+美国可选择地图着色问 ...

  9. 【算法设计与分析】屈婉玲教授—课程笔记

    网课地址与课件 B站:[北大公开课] 算法设计与分析 屈婉玲教授 (76p) 课件:来源于评论区小伙伴分享(百度云)     提取码:1111 笔记 课程知识框架 算法设计思想 设计思想:尽量选复杂度 ...

最新文章

  1. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )
  2. mac 当前文件夹打开终端_Mac上的这些实用你技巧,你知道几个?
  3. [网络安全自学篇] 三十一.文件上传之Upload-labs靶场及CTF题目01-10(四)
  4. AI最后--热门游戏引擎(CN地区)
  5. 微服务的好处与弊端_在云原生时代,就一定要用微服务吗?
  6. leetcode1047. 删除字符串中的所有相邻重复项
  7. 厦门大学计算机科学与技术学院考研分数线,2020年厦门大学计算机科学与技术考研经验分享...
  8. vscode 崩溃_太真实了!程序员崩溃的40个瞬间
  9. java多线程初识4
  10. 知己知彼-关于Oracle安全比特币勒索问题揭秘和防范
  11. 使用Python3将BT种子转磁力链接
  12. ROS机器人程序设计课程反思-2022终篇-
  13. iReport编辑报表,以及打印PDF
  14. 傅里叶变换F(f)与F(w)的探究——以余弦函数为例
  15. 从此爱情与我无关,只做一个嗜钱如命的渣男!
  16. 尚硅谷github案例
  17. js获取用户浏览器信息和ip地址以及位置
  18. 考研数学 第6讲 中值定理
  19. 计算机休眠后无法唤醒出现蓝屏,电脑休眠后无法唤醒怎么办【解决方法】
  20. 语义网、本体、OWL基础知识梳理

热门文章

  1. 火狐浏览器表单不跳转_表单button的outline在firefox浏览器下的问题
  2. IO流基本知识总结【字节输入输出流、字符输入输出流、转换流、对象流】
  3. 小汤学编程之JavaScript学习day01——认识JS、JS基础语法
  4. concurrent模块的使用
  5. jQuery查找标签--选择器,筛选器,模态对话框, 左侧菜单栏
  6. 每个开发者都应该懂一点单元测试
  7. 面向对象编程(OOP)特性 类和对象
  8. 教你50招提升ASP.NET性能(二十六):对于开发人员的数据库性能技巧
  9. myeclipse 8.5 安装jbpm3.2开发插件
  10. Flutter延时任务、Flutter通过Future与Timer实现延时任务