PAT 1136 A Delayed Palindrome [字符串反转] [大整数运算]

2024-04-09 11:18

本文主要是介绍PAT 1136 A Delayed Palindrome [字符串反转] [大整数运算],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Consider a positive integer N written in standard notation with k+1 digits a​i​​ as a​k​​⋯a​1​​a​0​​ with 0≤a​i​​<10 for all iand a​k​​>0. Then N is palindromic if and only if a​i​​=a​k−i​​for all i. Zero is written 0 and is also palindromic by definition.

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. Such number is called a delayed palindrome. (Quoted from https://en.wikipedia.org/wiki/Palindromic_number )

Given any positive integer, you are supposed to find its paired palindromic number.

Input Specification:

Each input file contains one test case which gives a positive integer no more than 1000 digits.

Output Specification:

For each test case, print line by line the process of finding the palindromic number. The format of each line is the following:

A + B = C

where A is the original number, B is the reversed A, and Cis their sum. A starts being the input number, and this process ends until C becomes a palindromic number -- in this case we print in the last line C is a palindromic number.; or if a palindromic number cannot be found in 10 iterations, print Not found in 10 iterations. instead.

Sample Input 1:

97152

Sample Output 1:

97152 + 25179 = 122331
122331 + 133221 = 255552
255552 is a palindromic number.

Sample Input 2:

196

Sample Output 2:

196 + 691 = 887
887 + 788 = 1675
1675 + 5761 = 7436
7436 + 6347 = 13783
13783 + 38731 = 52514
52514 + 41525 = 94039
94039 + 93049 = 187088
187088 + 880781 = 1067869
1067869 + 9687601 = 10755470
10755470 + 07455701 = 18211171
Not found in 10 iterations.

--------------------------------------这是题目和解题的分割线--------------------------------------

我怎么感觉这道题之前好像出现过(思考.jpg)

题目意思很简单啦,就是反转再相加,看能不能是回文。字符串反转的方法这道题总结过 PAT 1077 Kuchiguse ,这次用的是string里的reverse函数。有个需要注意的地方,不能直接相加,不然最后一个测试点会运行时错误。题目说了是十位数字,得用大整数,知识点见【大整数运算】 大整数的存储 | 高精度加法 | 高精度减法。还有就是,顺序很重要!A+B,A在前还是B在前很重要,不然错了测试点都不知道怎么回事!

还有两个小发现。

① 关于 no match for 'operator+' (operand types are 'basic_string' and 'int') 的报错。在解题的过程中,我发现c = (index + '0') + c; 会出现这个错误,而改写成 c += index + '0'; 则不会。查了下,看到这篇博客的解释是,编译器把括号里的内容变成了int类型(‘0’表示的是48),必须强制类型转换一下→c = char(index + '0') + c;

② string类型,如果要s[0]、s[1]......这样去赋值,必须事先给该变量一个初始值,不然赋值无效。比如说,必须string s = a;再s[0] = 'a';s[1] = 'b'。而不能string s;再s[0] = 'a';s[1] = 'b'。(我经常在string上踩雷= =以后得多用用才能多发现问题啊!

#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>using namespace std;//大整数相加 
string addBig(string a,string b)
{//这里必须有初始值 string c = a;int index = 0,i;//a、b长度一样,无需max(),也可以直接倒着遍历 for(i=a.length()-1;i>=0;i--){//别忘了数字和字符之间的相互转换('0') int tmp = a[i] -'0' + b[i] -'0' + index;c[i] = tmp%10 + '0';index = tmp/10;}//如果还有进位,加到字符串的开头 if(index!=0)c = char(index + '0') + c;return c;
}int main()
{string str,newStr;cin>>str;newStr = str;int cnt = 0;reverse(str.begin(),str.end());//循环条件,不是回文并且次数在10以内 while(newStr!=str&&cnt<10){cout<<newStr<<" + "<<str<<" = ";newStr = addBig(str,newStr);str = newStr;cout<<newStr<<endl;reverse(str.begin(),str.end());cnt++;}if(cnt>=10)cout<<"Not found in 10 iterations.\n";elsecout<<newStr<<" is a palindromic number.\n";return 0;
}

 

这篇关于PAT 1136 A Delayed Palindrome [字符串反转] [大整数运算]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888005

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

ural 1297. Palindrome dp

1297. Palindrome Time limit: 1.0 second Memory limit: 64 MB The “U.S. Robots” HQ has just received a rather alarming anonymous letter. It states that the agent from the competing «Robots Unli

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

C和指针:字符串

字符串、字符和字节 字符串基础 字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。 字符串长度就是字符串中字符数。 size_t strlen( char const *string ); string为指针常量(const修饰string),指向的string是常量不能修改。size_t是无符号数,定义在stddef.h。 #include <stddef.h>

PHP字符串全排列

方法一: $str = 'abc';$a =str_split($str);perm($a, 0, count($a)-1);function perm(&$ar, $k, $m) {if($k == $m){ echo join('',$ar), PHP_EOL;}else {for($i=$k; $i<=$m; $i++) {swap($ar[$k], $ar[$i]);perm($ar

PHP7扩展开发之字符串处理

前言 这次,我们来看看字符串在PHP扩展里面如何处理。 示例代码如下: <?phpfunction str_concat($prefix, $string) {$len = strlen($prefix);$substr = substr($string, 0, $len);if ($substr != $prefix) {return $prefix." ".$string;} else