换网站公司,three.js做的酷炫网站,项目建设目标怎么写,外贸平台收费标准题目 题目大意
一个非回文数#xff0c;加上它的翻转数所得的和#xff0c;进行k次#xff0c;有可能会得到一个回文数。给出一个数n#xff0c;限制相加次数为k次#xff0c;如果小于k次就得到回文数#xff0c;那么输出该回文数和相加的次数#xff1b;如果进行k次还…题目 题目大意
一个非回文数加上它的翻转数所得的和进行k次有可能会得到一个回文数。给出一个数n限制相加次数为k次如果小于k次就得到回文数那么输出该回文数和相加的次数如果进行k次还没有得到回文数那么输出最后的结果和k值。
思路
10的10次方按照最坏情况考虑乘以100为10的20次方超过了long long的范围所以是大数加法题目。要用字符串来表示数字。由于是加法运算不管哪两个数相加都最多进1位因此可以用isadd来表示是否需要进位。注意计算首位加法如果进位就跳出了for循环所以要再循环外放一个isadd的if语句如果进位res再加‘1’。
代码
#include iostream
#include string
#include algorithm
using namespace std;int main(){string s;int k;cin s k;for (int i 0; i k; i){string s2 s;reverse(s2.begin(), s2.end());if (s s2){cout s endl;cout i endl;return 0;}string res ;bool isadd false;for (int i (int)s.size() - 1; i 0; i--){if (isadd){res ((s[i] - 0) (s2[i] - 0) 1) % 10 0; // 先加1后取余if ((s[i] - 0) (s2[i] - 0) 1 10){isadd true;}else{isadd false;}}else{res ((s[i] - 0) (s2[i] - 0)) % 10 0;if ((s[i] - 0) (s2[i] - 0) 10){isadd true;}else{isadd false;}}}if (isadd) res 1;reverse(res.begin(), res.end());s res;}cout s endl;cout k endl;return 0;
}