PAT A1024 Palindromic Number (25 分)——回文,大整数
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 (≤1010) is the initial numer and K (≤100) 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 K instead.
Sample Input 1:
67 3
Sample Output 1:
484
2
Sample Input 2:
69 3
Sample Output 2:
1353
3
#include <stdio.h>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
long long tonum(string s) {
long long res = ;
for (int i = ; i < s.length(); i++) {
res = res * + s[i] - '';
}
return res;
}
string tos(long long num) {
string res = "";
do {
res += '' + num % ;
num /= ;
} while (num != );
reverse(res.begin(), res.end());
return res;
}
string add(string s1, string s2) {
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
string s3="";
int carry = ;
int i = ;
for (i; i < s1.length() && i < s2.length(); i++) {
int tmp1 = s1[i] - '';
int tmp2 = s2[i] - '';
int tmp = tmp1 + tmp2 + carry;
s3 += tmp % + '';
carry = tmp / ;
}
if (s1.length() > s2.length()) {
while(i<s1.length()){
if (carry != ) {
int tmp1 = s1[i] - '';
tmp1 += carry;
s3 += tmp1 % + '';
carry = tmp1 / ;
i++;
}
else break;
}
if (carry != ) s3 += '' + carry;
else if (i < s1.length()) {
s3 += s1.substr(i, s1.length() - i);
}
}
else if (s1.length() < s2.length()) {
while (i < s2.length()) {
if (carry != ) {
int tmp1 = s2[i] - '';
tmp1 += carry;
s3 += tmp1 % + '';
carry = tmp1 / ;
i++;
}
else break;
}
if (carry != ) s3 += '' + carry;
else if (i < s2.length()) {
s3 += s2.substr(i, s2.length() - i);
}
}
else if (s1.length() == s2.length()) {
if (carry != ) s3 += '' + carry;
}
reverse(s3.begin(), s3.end()); return s3;
}
bool pali(string s) {
string s2, s3;
s2 = s;
s3 = s;
reverse(s2.begin(), s2.end());
if (s2 == s3)return true;
else return false;
}
int main() {
string s;
int k;
cin >> s >> k;
int j = ;
string s_2;
s_2 = s;
if (!pali(s)) {
for (j = ; j <= k; j++) {
s_2 = s;
reverse(s_2.begin(), s_2.end());
s = add(s, s_2);
if (pali(s))break;
}
}
if (j == k + )j--;
cout << s << endl << j;
system("pause");
}
注意点:又是回文判断题,注意数字可能会超出long long 范围,所以只能用大数相加即两个字符串相加来做,回文的判断直接用了字符串的反转和==。
ps:发现字符串相加想太多了,一个数和他的反转两个数字一定位数是相等的,不用这么麻烦。而且做大整数加法正确的方式是给短的那个数补0,这样直接最后判断一下进位就好了。
PAT A1024 Palindromic Number (25 分)——回文,大整数的更多相关文章
- PAT 甲级 1024 Palindromic Number (25 分)(大数加法,考虑这个数一开始是不是回文串)
1024 Palindromic Number (25 分) A number that will be the same when it is written forwards or backw ...
- 【PAT甲级】1024 Palindromic Number (25 分)
题意: 输入两个正整数N和K(N<=1e10,k<=100),求K次内N和N的反置相加能否得到一个回文数,输出这个数和最小的操作次数. trick: 1e10的数字相加100次可能达到1e ...
- 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 (Advanced Level) Practice 1019 General Palindromic Number (20 分) 凌宸1642
PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) 凌宸1642 题目描述: A number that will ...
- JAVA 基础编程练习题25 【程序 25 求回文数】
25 [程序 25 求回文数] 题目:一个 5 位数,判断它是不是回文数.即 12321 是回文数,个位与万位相同,十位与千位相同. package cskaoyan; public class cs ...
- [LeetCode] 516. Longest Palindromic Subsequence 最长回文子序列
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- PTA PAT排名汇总(25 分)
PAT排名汇总(25 分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科 ...
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
随机推荐
- 转载 一位资深程序员大牛给予Java初学者的学习路线建议
原文链接:http://geek.csdn.net/news/detail/242336 Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Jav ...
- Java的第6天,学习运算符
提到运算符我们就会想起 加 减 乘 除: Java中的一些运算符:关系运算符.逻辑运算符.赋值运算符.和条件运算符: 其中算术运算符有:+ , - , * , \, % ,++, -- ; + , - ...
- Java并发编程:线程池的使用(转载)
转载自:https://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...
- code for qint function
function [p,y,a] = qint(ym1,y0,yp1) %QINT - quadratic interpolation of three adjacent samples % % [p ...
- springMVC 拦截器源码解析
前言:这两天学习了代理模式,自然想到了 springmvc 的 aop 使用的就是动态代理,拦截器使用的就是 jdk 的动态代理.今天看了看源码,记录一下.转载请注明出处:https://www.cn ...
- ConcurrentHashMap底层实现原理(JDK1.8)源码分析
ref:https://blog.csdn.net/xu768840497/article/details/79194701 http://www.cnblogs.com/leesf456/p/545 ...
- JavaScript函数箭头的优势在哪里
译者按: 看上去只是语法的变动,其实也影响了this的作用域. 原文: JavaScript: Arrow Functions for Beginners 译者: Fundebug 为了保证可读性,本 ...
- css兼容问题(一)
开头语:不用就忘,还是自己乖乖的记笔记吧! 正文开始: (一)如果你的页面对IE7兼容没有问题,又不想大量修改现有代码,同时又能在IE8中正常使用,微软声称,开发商仅需要在目前兼容IE7的网站上 ...
- PyCharm 添加签名和时间
工具栏上添加上 Toolbar 点击 Editor -> File and Code Templates -> Python Script 在文本框上填写需要的数据
- jquery弹窗时禁止body滚动条滚动
当弹出一个jq提示窗口的时候,一般窗口右边还会有进度条的情况,禁止进度条方法禁止浏览器滚动条滚动: $('body').css({ "overflow-x":"hidde ...