您的位置:首页 > 编程语言

第一次用string类,贴一下代码

2013-11-11 20:17 218 查看


又见回文数

时间限制:1000 ms | 内存限制:65535 KB
难度:3

描述

冷淡的回文数被水了,各种被水,然后他很生气,然后...

一个数从左边读和从右边读一样,就说这个数是回文数。如121就是一个回文数。

这个简单了点,咱们这样规定:给定一个十进制数,你判断一下在二~十六进制下她是否是回文数,你能征服她吗?

如17用十进制表示它不是回文数,但是用二进制表示(10001),它是一个回文数。

输入输入包含一些整数。每个数n(0<n<50000)用十进制表示,每个数一行。输入0结束。
输出程序输出信息包括:“number i is palindrom in basis ”,i是给定的数,接着输出进制,在该进制下i是回文数。如果在二~十六进制下都不是回文,输出信息包括:“number i is not a palindrom”。
样例输入
17
19
0


样例输出
number 17 is palindrom in basis 2 4 16
number 19 is not a palindrom


来源
South America 2001 改编

代码:

#include <iostream>

using namespace std;

#include<string.h>

#include<string>

string trans(int a,int i)

{

string c;

int j = 0;

for(j=0;;j++)

{

if(a%i>9)

//c[j]=a%i+55;

c+= (a%i+55); //string类,的用法,直接加就可以了,比c要简单的多,直接将加入的数加在了串的最后以为。

else //c[j]=a%i+48;

c+=(a%i+48);

a/=i;

if(a==0)

break;

}

c[++j]='\0';

return c;

}

int palindrom(string b)

{

int d, i = 0;

d = b.size();

for(i=0;i<=d/2;i++)

{

if(b[i]==b[d-1-i])

continue;

else return 0;

}

return 1;

}

int main()

{

int a,i,j;

string b;

int c[17];

while(cin>>a&&a!=0)

{

for(i=2,j=0;i<=16;i++)

{

b=trans(a,i);

if(palindrom(b)){c[j]=i;j++;}

//c += i;

}

if(j==0)

cout<<"number "<<a<<" is not a palindrom"<<endl;

else

{

cout<<"number "<<a<<' '<<"is palindrom in basis";

for(i=0;i<j;i++)

cout<<' '<<c[i];

cout<<endl;

}

}

return 0;

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