不一样的回文数
程序员文章站
2024-01-25 22:06:58
...
不一样的回文数
1. 第一眼看上去脑中要想到一定会有一个回文数判定的函数,还会有一个两数相加的函数,要注意两数相加注意进位
2. 两个数相加不一定是十进制的还有可能是二进制的等等,比如二进制相加从后面一个一个的加,所以在声明是声明一个字符串变量保存数,然后在将字符串转换为整型数组进行相加计算
3. 还要注意在字符串与整型数组相互转换时要考虑处理16进制数的情况,所以判断该字符是否是字母,如果是将A-F转化成10~15
下面开始写代码
#include<iostream>
#include <string>
using namespace std;
int r,a[500],len ;//声明进制数,整型数组,字符串长度
string s;
//判断回文数
bool palindromes()
{
for(int i = 0;i < len;i++)
{
if(a[i] != a[len - 1 - i])
{
return false;
}
}
return true;
}
//两数相加
void add()
{
int tem = 0;
int b[500] = {0};
for(int i = 0;i < len;i++)
{
tem += a[i] + a[len - i - 1];
b[i] = tem % r;
tem = tem / r;
}
if(tem)//考虑到进位
{
b[len] = tem;
len++;
}
for(int i = 0;i < len;i++)
{
a[i] = b[i];
}
}
int main()
{
int sum = 0;//定义一个计数器
cin >> r;
cin >> s;
len = s.size();
//字符串转换整型数组
for(int i = 0;i < len;i++)
{
if(s[i] < 65)
{
a[i] = s[i] - 48;
}
else
{
a[i] = s[i] - 55;
}
}
//首先判断一下输入的那个数是不是回文数
if(palindromes())
{
cout << "STEP=0" << endl;
}
for(int i = 0;i < 30;i++)
{
add();
sum++;
if(palindromes())
{
cout << "STEP=" << sum << endl;
return 0;
}
}
cout << "Impossible!" << endl;
return 0;
}
上一篇: mybatis数据库分页
下一篇: KNN邻近算法约会网站实例