NOIP|题解【洛谷】P1015 回文数

题目描述: 点击进入题目
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。例如:给定一个
十进制数 5656,将 5656 加 6565(即把 5656 从右向左读),得到 121121 是一个回文数。
题意理解: 这是一道很明显的高精度加法的模拟题,如果这个数是回文数,那就输出到这个回文数的步数,输出格
式要注意一下,如果不是就把这个数和这个数反过来加起来。
思路分解:

  1. 先把高精度加法板子打起来
  2. 把输入进来的数放进一个vector里面
  3. 打一个判断回文数的程序
  4. 循环判断是否为回文数,输出格式要注意
  5. 【NOIP|题解【洛谷】P1015 回文数】如果30步以上还不是回文数,那么输出Impossible!
代码:
#include using namespace std; int n; bool check(vector &a) { vector b=a; reverse(b.begin(),b.end()); for(int i=0; i add(vector &a,vector &b) { vector c; int t=0; for(int i=0; i m; cin>>n>>M; if(n<=10) { for(int i=M.size()-1; i>=0; i--) m.push_back(M[i]-'0'); } else { for(int i=M.size()-1; i>=0; i--) { if(isdigit(M[i])) m.push_back(M[i]-'0'); else m.push_back(M[i]-'A'+10); //统一转换到十进制做加法 } } for(int i=0; i<=30; i++) { if(check(m)) { cout<<"STEP="< c=m; reverse(c.begin(),c.end()); m=add(m,c); } } cout<<"Impossible!"; return 0; }

注意事项
  1. 高精度加法里进位要取余进制,除以进制

    推荐阅读