NOIP|题解【洛谷】P1015 回文数
题目描述: 点击进入题目
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。例如:给定一个
十进制数 5656,将 5656 加 6565(即把 5656 从右向左读),得到 121121 是一个回文数。
题意理解: 这是一道很明显的高精度加法的模拟题,如果这个数是回文数,那就输出到这个回文数的步数,输出格
式要注意一下,如果不是就把这个数和这个数反过来加起来。
思路分解:
- 先把高精度加法板子打起来
- 把输入进来的数放进一个vector里面
- 打一个判断回文数的程序
- 循环判断是否为回文数,输出格式要注意
- 【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;
}
注意事项
- 高精度加法里进位要取余进制,除以进制
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长