您的位置:首页 > 其它

ZOJ 1078

2017-10-29 22:32 232 查看
/*判断回文数:
1,进制分解:用模运算和整除运算即可,每一位存在数组c
2,回文判断:将c中按长度len对折,判断对应的位是否相同,有一个不同,就不是回文数*/
#include<iostream>
#include<stdio.h>

using namespace std;

int main()
{
int n;
while (cin >> n&&n)
{
char c[50];
int sign = 0;         //sign=0表示不是回文数
int base[17] = { 0 };
for (int i = 2; i < 17; i++)
{
int m = n;
int len = 0;
//按进制分解
while (m)
{
c[len++] = m%i;
m /= i;
}
sign = 1;
for (int j = 0; j < len/2; j++)
{
if (c[j] != c[len - j - 1])
sign = 0;
}
if (sign)
base[i] = 1;         //在进制i时,是回文
}
int flag = 0;        //没有回文数
for (int i = 2; i < 17; i++)
{
if (base[i] == 1)
flag = 1;
}
if (flag)
{
printf("Number %d is palindrom in basis", n);
for (int i = 2; i < 17; i++)
{
if(base[i]==1)
printf(" %d", i);
}
cout << endl;
}
else
printf("Number %d is not a palindrom\n", n);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息