如何用二进制表示一个长尾词,使其成为回文数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计271个文字,预计阅读时间需要2分钟。
1009-回文数 [NOIP1999] 回文数_2021秋季算法入门班第一章习题:模拟、枚举、贪心(nowcoder.com) 本题的关键在于将不同进制的数转换为十进制,并判断其是否为回文数。
1009-[NOIP1999]回文数_2021秋季算法入门班第一章习题:模拟、枚举、贪心 (nowcoder.com)
这道题的关键就是把不同进制的变成十进制的
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
string str;
cin>>str;
//进制转换
long long m=0;
for(int i=0;i<str.size();i++)//把一个不同进制的数变成十进制的
{
if(str[i]>'9') //对于一位数,十进制的数没有大于9的,那就是其他进制的,比如十六进制0A
m=m*n+str[i]-'A'+10;//10进制以上
else
m=m*n+str[i]-'0';
}
for(int i=0;i<30;i++)
{
long long x=m,y=0;
while(x)//判断回文串,可以用这个方法
{
y=y*n+x%n;
x/=n;
}
if(y==m)
{
cout<<"STEP="<<i;
return 0;
}
m+=y;
}
cout<<"Impossible!";
return 0;
}
Code over!
本文共计271个文字,预计阅读时间需要2分钟。
1009-回文数 [NOIP1999] 回文数_2021秋季算法入门班第一章习题:模拟、枚举、贪心(nowcoder.com) 本题的关键在于将不同进制的数转换为十进制,并判断其是否为回文数。
1009-[NOIP1999]回文数_2021秋季算法入门班第一章习题:模拟、枚举、贪心 (nowcoder.com)
这道题的关键就是把不同进制的变成十进制的
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
string str;
cin>>str;
//进制转换
long long m=0;
for(int i=0;i<str.size();i++)//把一个不同进制的数变成十进制的
{
if(str[i]>'9') //对于一位数,十进制的数没有大于9的,那就是其他进制的,比如十六进制0A
m=m*n+str[i]-'A'+10;//10进制以上
else
m=m*n+str[i]-'0';
}
for(int i=0;i<30;i++)
{
long long x=m,y=0;
while(x)//判断回文串,可以用这个方法
{
y=y*n+x%n;
x/=n;
}
if(y==m)
{
cout<<"STEP="<<i;
return 0;
}
m+=y;
}
cout<<"Impossible!";
return 0;
}
Code over!

