PTA (Advanced Level) 1024 Palindromic Number
Palindromic Number
A number that will be the same when it is written forwards or backwards is known as a Palindromic Number. For example, 1234321 is a palindromic number. All single digit numbers are palindromic numbers.
Non-palindromic numbers can be paired with palindromic ones via a series of operations. First, the non-palindromic number is reversed and the result is added to the original number. If the result is not a palindromic number, this is repeated until it gives a palindromic number. For example, if we start from 67, we can obtain a palindromic number in 2 steps: 67 + 76 = 143, and 143 + 341 = 484.
Given any positive integer N, you are supposed to find its paired palindromic number and the number of steps taken to find it.
Input Specification:
Each input file contains one test case. Each case consists of two positive numbers N and K, where N (≤) is the initial numer and K (≤) is the maximum number of steps. The numbers are separated by a space.
Output Specification:
For each test case, output two numbers, one in each line. The first number is the paired palindromic number of N, and the second number is the number of steps taken to find the palindromic number. If the palindromic number is not found after K steps, just output the number obtained at the Kth step and Kinstead.
Sample Input 1:
67 3
Sample Output 1:
484
2
Sample Input 2:
69 3
Sample Output 2:
1353
3
题目解析
本题给出两个数字n与k,n代表未转换数字,k代表最大转换步数,如果n不是回文数字屎就执行将n反转,n + 反转后的数字,若n还不是回文数字则继续执行上述操作,直到n为回文数字或执行次数超过最大转换步数为止。
本题数据可能超过int范围,既然既要判断回文又要反转数字,那么索性之间用处理大数的方法——用字符串记录数字。
之后模拟出加法操作与反转操作,判断执行后的数组是否为回文串即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e3;
struct Number{ //记录数字
int num[MAX]; //存储数字的每一位(为了方便加法运算倒序存储)
int len; //存储数字位数
Number(){ //构造函数
memset(num, , sizeof(num)); //初始化num每一位都为0
len = ; //位数为0
}
};
Number toNumber(string temp){ //字符串转化为Number
Number a;
a.len = temp.size();
for(int i = ; i < a.len; i++) //倒序存储
a.num[i] = temp[a.len - i - ] - '';
return a;
}
Number add(Number a, Number b){ //加法函数
Number c;
int carry = ; //进位
for(int i = ; i < a.len || i < b.len; i++){ //以较长的长度为界限(当然本题两个数长度相等,其实以任意一个为界都可以)
int temp = a.num[i] + b.num[i] + carry; //两个位置相加后加上进位
c.num[c.len++] = temp % ; //记录新数字的对应位
carry = temp / ; //计算新的进位
}
if(carry != ) //若最高位有进位
c.num[c.len++] = carry;
return c;
}
Number reversed(Number a){ //反转函数
Number b;
for(int i = a.len - ; i >= ; i--){
b.num[b.len++] = a.num[i];
}
return b; }
bool judgePalindromic(Number a){ //判断回文
for(int i = ; i < a.len / ; i++){
if(a.num[i] != a.num[a.len - i - ]) //从两端像中间匹配,若失匹返回false
return false;
}
return true;
}
int main()
{
string str;
int k;
cin >> str >> k; //输入数字与最大转化次数
Number n = toNumber(str); //将数字转化为Number型
int cnt = ; //cnt记录当前转化次数
while(cnt < k && !judgePalindromic(n)){ //转化次数超限或成功转化为回文时结束循环
Number temp = reversed(n); //反转
n = add(n, temp); //相加
cnt++; //转化次数加1
}
for(int i = n.len - ; i >= ; i--) //输出转化后的数字
printf("%d", n.num[i]);
printf("\n");
printf("%d\n", cnt); //输出转化次数
return ;
}
PTA (Advanced Level) 1024 Palindromic Number的更多相关文章
- PAT (Advanced Level) 1024. Palindromic Number (25)
手动模拟加法高精度. 注意:如果输入数字的就是回文,这个时候输出0步. #include<iostream> #include<cstring> #include<cma ...
- PTA (Advanced Level)1082.Read Number in Chinese
Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese ...
- PAT 甲级 1024 Palindromic Number
1024. Palindromic Number (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...
- PAT 甲级 1024 Palindromic Number (25 分)(大数加法,考虑这个数一开始是不是回文串)
1024 Palindromic Number (25 分) A number that will be the same when it is written forwards or backw ...
- PTA (Advanced Level) 1019 General Palindromic Number
General Palindromic Number A number that will be the same when it is written forwards or backwards i ...
- PAT Advanced 1024 Palindromic Number (25) [数学问题-⼤整数相加]
题目 A number that will be the same when it is written forwards or backwards is known as a Palindromic ...
- 1024 Palindromic Number int_string转换 大整数相加
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- 1024. Palindromic Number (25)
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- PAT 1024 Palindromic Number[难]
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
随机推荐
- x13 vs md5
x13 vs md5 阅读: 评论: 作者:Rybby 日期: 来源:rybby.com 最近在设计巴巴变时想对用户设计的节点模块添加锁定功能,比如你的网站可以让用户发表文章或评论,而你想让用 ...
- LINUX中关于SIGNAL的定义
/* Signals. */ #define SIGHUP 1 /* Hangup (POSIX). */ #define SIGINT 2 /* Interrupt (ANSI). */ #defi ...
- 章文嵩博士和他背后的负载均衡(LOAD BANLANCER)帝国
案首语: 阿里集团技术大牛,@正明,淘宝基础核心软件研发负责人.LVS创始人.阿里云首席科学家章文嵩博士从阿里离职,去追求技术人生另一段历程,让阿里像我一样的很多热爱技术的工程师都有一丝牵动和感触. ...
- SVG系列教程:SVG简介与嵌入HTML页面的方式
地址:http://www.w3cplus.com/html5/svg-introduction-and-embedded-html-page.html 随着技术向前的推进,SVG相关的讨论也越渐频繁 ...
- C# 实现将多个word文档合并成一个word文档的功能
前段时间项目上遇到这么一个需求,需要将多个OCR识别的word文档合并成一个,于是就在网上找了找,自己修改了一下.在这里跟大家分享一下,希望有用的到的. 要做多word文档合并,首先要导入Micros ...
- Ocelot中文文档入门
入门 Ocelot仅适用于.NET Core,目前是根据netstandard2.0构建的,如果Ocelot适合您,这个文档可能会有用. .NET Core 2.1 安装NuGet包 使用nuget安 ...
- 微信退款证书使用c#
微信退款需要证书 data为已封装好的xml数据 具体怎么封装>打开 public string get(string data) { string cert = @"D:\certi ...
- WinForm ListView不分页加载大量数据
WinForm的ListView在加载大量数据时会出现闪烁的问题,同时数据加载很慢.如果你的列表中有超过千条的数据且不做特殊处理还是用普通的ListView.Items.Add(),估计你的用户得抱怨 ...
- 《JavaScript高级程序设计》3.7 函数
位于return语句之后的代码不会执行; return语句也可以不带有任何返回值. 这种情况下, 函数在停止执行后会返回undefined值. 这种用法一般用在需要提前停止函数执行而又不需要返回值的情 ...
- 石头剪刀布Java实现
java实现石头剪刀布过程 首先来看石头剪刀布的所有可能情况,具体如下图 第一种思路是穷举所有可能,使用if条件语句,略显呆板和麻烦. 第二种思路,因为计算机存的是数字,所以我们可以从数字角度来找规律 ...