)
给定一个 k1 位的正整数 N写成 ak ⋯a1a0的形式其中对所有 i 有 0≤ai 10 且 ak0。N 被称为一个回文数当且仅当对所有 i 有 aiak−i 。零也被定义为一个回文数。非回文数也可以通过一系列操作变出回文数。首先将该数字逆转再将逆转数与该数相加如果和还不是一个回文数就重复这个逆转再相加的操作直到一个回文数出现。如果一个非回文数可以变出回文数就称这个数为延迟的回文数。定义翻译自 https://en.wikipedia.org/wiki/Palindromic_number 给定任意一个正整数本题要求你找到其变出的那个回文数。输入格式输入在一行中给出一个不超过1000位的正整数。输出格式对给定的整数一行一行输出其变出回文数的过程。每行格式如下A B C其中 A 是原始的数字B 是 A 的逆转数C 是它们的和。A 从输入的整数开始。重复操作直到 C 在 10 步以内变成回文数这时在一行中输出 C is a palindromic number.或者如果 10 步都没能得到回文数最后就在一行中输出 Not found in 10 iterations.。输入样例 197152输出样例 197152 25179 122331122331 133221 255552255552 is a palindromic number.输入样例 2196输出样例 2196 691 887887 788 16751675 5761 74367436 6347 1378313783 38731 5251452514 41525 9403994039 93049 187088187088 880781 10678691067869 9687601 1075547010755470 07455701 18211171Not found in 10 iterations.思路回文数是一个数倒置后和它本身相等一开始用的stoi()函数转换字符串成int型相加结果运行后有测试点出错最后一个测试点运行超时。发现是使用stoi函数该函数不能转换长字符串。使用字符串相加的方法。carry代表进位。代码#includeiostream#includealgorithmusing namespace std;stringrev(string s){reverse(s.begin(),s.end());returns;}stringadd(string s1,string s2){string ss1;intcarry0;for(intis1.size()-1;i0;i--){s[i](s1[i]-0s2[i]-0carry)%100;carry(s1[i]-0s2[i]-0carry)/10;}if(carry0){s1s;}returns;}intmain(){string s,sum;cins;if(srev(s)){couts is a palindromic number.;return0;}else{for(inti0;i10;i){sumadd(s,rev(s));couts rev(s) sum;putchar(\n);if(sumrev(sum)){coutsum is a palindromic number.;return0;}ssum;}}coutNot found in 10 iterations.\n;return0;}