【题目链接】

ybt 1309:【例1.6】回文数(Noip1999)
洛谷 P1015 [NOIP1999 普及组] 回文数
注:两OJ上的问题考察内容相同,但输出要求不同

【题目考点】

1.高精度 n进制运算

数字数组每个元素保存n进制数字的1位

例:16进制数字A5F,
用数字数组表示为:a[0]:3, a[1]:15, a[2]:5, a[3]:10
十进制高精度计算函数中出现10的位置,都用n来代替,即为n进制计算。

【解题思路】

根据题目描述,先读入高精度数字。
循环进行:判断该数字是不是回文数字,如果是则输出结果,程序结束。如果不是,则循环构造其逆向的数字,然后二者加和。循环此过程。
如果到最后也没有找到回文数字,输出Impossible。

【题解代码】

两个OJ上的输出要求不同,因而输出部分代码有差异。其它部分都是相同的。

ybt 1309:【例1.6】回文数(Noip1999):

#include<bits/stdc++.h>
using namespace std;
#define N 105
int n, a[N];
char s[N];
void tonum(char s[], int a[])//转为数字数组
{int len = strlen(s);for(int i = 1; i <= len; ++i){if(s[len-i] >= '0' && s[len-i] <= '9')a[i] = s[len-i] - '0';elsea[i] = s[len-i] - 'A' + 10;}a[0] = len;
}
void genOpp(int a[], int b[])//生成a的逆向数字b
{for(int i = 1; i <= a[0]; ++i)//生成a的逆向数字b b[i] = a[a[0]+1-i];b[0] = a[0];
}
void addToA(int a[], int b[])//n进制高精度加法 a += b
{int c = 0; for(int i = 1; i <= a[0] || i <= b[0]; ++i){a[i] += b[i] + c; c = a[i] / n;//n进制 a[i] %= n;}if(c > 0)a[++a[0]] = c;
}
bool isPalin(int a[])//判断数字a是否是回文的
{for(int i = 1; i <= a[0]/2; ++i)//遍历一半数组 {if(a[i] != a[a[0]-i+1])return false;}return true;
}
int main()
{int b[N] = {};//b:a的逆向数字 cin >> n >> s;tonum(s, a);for(int i = 0; i <= 30; ++i){if(isPalin(a)){cout << i;return 0;}genOpp(a, b);//生成a的逆向数字baddToA(a, b);//a+=b}cout << "Impossible";return 0;
}

洛谷 P1015 [NOIP1999 普及组] 回文数:

#include<bits/stdc++.h>
using namespace std;
#define N 105
int n, a[N];
char s[N];
void tonum(char s[], int a[])//转为数字数组
{int len = strlen(s);for(int i = 1; i <= len; ++i){if(s[len-i] >= '0' && s[len-i] <= '9')a[i] = s[len-i] - '0';elsea[i] = s[len-i] - 'A' + 10;}a[0] = len;
}
void genOpp(int a[], int b[])//生成a的逆向数字b
{for(int i = 1; i <= a[0]; ++i)//生成a的逆向数字b b[i] = a[a[0]+1-i];b[0] = a[0];
}
void addToA(int a[], int b[])//n进制高精度加法 a += b
{int c = 0; for(int i = 1; i <= a[0] || i <= b[0]; ++i){a[i] += b[i] + c; c = a[i] / n;//n进制 a[i] %= n;}if(c > 0)a[++a[0]] = c;
}
bool isPalin(int a[])//判断数字a是否是回文的
{for(int i = 1; i <= a[0]/2; ++i)//遍历一半数组 {if(a[i] != a[a[0]-i+1])return false;}return true;
}
int main()
{int b[N] = {};//b:a的逆向数字 cin >> n >> s;tonum(s, a);for(int i = 0; i <= 30; ++i){if(isPalin(a)){cout << "STEP=" << i;return 0;}genOpp(a, b);//生成a的逆向数字baddToA(a, b);//a+=b}cout << "Impossible!";return 0;
}

信息学奥赛一本通 1309:【例1.6】回文数(Noip1999) | 洛谷 P1015 [NOIP1999 普及组] 回文数相关推荐

  1. 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏

    [题目链接] ybt 1970:[15NOIP普及组]扫雷游戏 OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 [题目考点] 1 ...

  2. 信息学奥赛一本通 1925:【03NOIP普及组】麦森数 | OpenJudge NOI 4.4 1708:麦森数 | 洛谷 P1045 [NOIP2003 普及组] 麦森数

    [题目链接] ybt 1925:[03NOIP普及组]麦森数 OpenJudge NOI 4.4 1708:麦森数 洛谷 P1045 [NOIP2003 普及组] 麦森数 [题目考点] 1. 高精度 ...

  3. 信息学奥赛一本通 1314:【例3.6】过河卒(Noip2002) | 1921:【02NOIP普及组】过河卒 | 洛谷 P1002 [NOIP2002 普及组] 过河卒

    [题目链接] ybt 1314:[例3.6]过河卒(Noip2002) ybt 1921:[02NOIP普及组]过河卒 洛谷 P1002 [NOIP2002 普及组] 过河卒 [题目考点] 1. 坐标 ...

  4. 信息学奥赛一本通 1316:【例4.6】数的计数(Noip2001) | 1914:【01NOIP普及组】数的计数 | 洛谷 P1028 [NOIP2001 普及组] 数的计算

    [题目链接] ybt 1316:[例4.6]数的计数(Noip2001) ybt 1914:[01NOIP普及组]数的计数 洛谷 P1028 [NOIP2001 普及组] 数的计算 [题目考点] 1. ...

  5. 信息学奥赛一本通 1208:2的幂次方表示 | OpenJudge 2.2 8758:2的幂次方表示 | 洛谷 P1010 [NOIP1998 普及组] 幂次方

    [题目链接] ybt 1208:2的幂次方表示 OpenJudge 2.2 8758:2的幂次方表示 洛谷 P1010 [NOIP1998 普及组] 幂次方 [题目考点] 1. 递归 [解题思路] 递 ...

  6. 信息学奥赛一本通 ybt 1933:【05NOIP普及组】循环 | 洛谷 P1050 [NOIP2005 普及组] 循环

    [题目链接] ybt 1933:[05NOIP普及组]循环 洛谷 P1050 [NOIP2005 普及组] 循环 [题目考点] 1.高精度 2.数学 [解题思路] 要求最后k位的循环长度,可以从低位向 ...

  7. 信息学奥赛一本通 1173:阶乘和 | OpenJudge NOI 1.6 15 | 洛谷 P1009 [NOIP1998 普及组] 阶乘之和

    [题目链接] ybt 1173:阶乘和 注:一本通上这题,应该把n≤50n\le50n≤50当做n≤100n\le100n≤100来看 OpenJudge NOI 1.6 15:阶乘和 洛谷 P100 ...

  8. 信息学奥赛一本通 1910:【00NOIP普及组】计算器的改良 | 洛谷 P1022 [NOIP2000 普及组] 计算器的改良

    [题目链接] ybt 1910:[00NOIP普及组]计算器的改良 洛谷 P1022 [NOIP2000 普及组] 计算器的改良 [题目考点] 1. 字符数组 2. 一元一次方程 3. 模拟 [解题思 ...

  9. 信息学奥赛一本通 1979:【18NOIP普及组】龙虎斗 | 洛谷 P5016 [NOIP2018 普及组] 龙虎斗

    [题目链接] ybt 1979: [18NOIP普及组]龙虎斗 洛谷 P5016 [NOIP2018 普及组] 龙虎斗 [题目考点] 1. long long类型使用 已知变量a, b是int类型的变 ...

最新文章

  1. GPU、AI芯片技术市场分析
  2. ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)A ASCII Area
  3. Win7无法安装程序提示Installer integrity check has failed的解决方法
  4. MySQL学习之路:多实例无法启动排错
  5. wxWidgets:wxFileCtrlEvent类用法
  6. 开启mybatis日志_Mybatis源码分析之Cache二级缓存原理 (五)
  7. 数据库、表、表内容增删改查
  8. MYSQL-5.5二进制包安装
  9. 使用dockerfile自动化构建镜像
  10. Bootstrap--导航栏样式编辑
  11. jquery中prop()和attr()的使用
  12. java运行指定文件_java打开指定文件(运行指定程序exe)
  13. 【云周刊】第125期:“机器学习”三重门_“中庸之道”趋若人
  14. app:利用HBuilder打包webpack项目
  15. 【学习笔记】信息系统项目管理-项目採购管理-合同分类
  16. 下载程序到STC单片机的操作步骤
  17. java系统课程设计报告_JAVA学生管理系统课程设计报告
  18. paypal支付交易数据
  19. 用Windows Media Service打造的流媒体直播系统
  20. 三十岁以后,我一定能阔起来!

热门文章

  1. Entity Framework加载相关实体——Explicit Loading
  2. 为什么说去中心化很重要
  3. python中递归函数写法_python中递归函数如何创建
  4. Mysql查询优化——中间表方法优化count()统计大数据量总数问题
  5. 微信开发实现一键拨号出现屏蔽问题的解决方案
  6. Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
  7. 实践中整理出tomcat集群和负载均衡
  8. 微服务架构案例(04):中间件集成,公共服务封装
  9. Spring、SpringMVC、SpringBoot、SpringCloud的关系分享
  10. 数据中台赋能企业数字化转型的四个关键成功因素