寒假补题——回文数
题目思路比较简单,进制转换和判断回文数。注意一下数据的规模,用int型可能会有溢出,用long long类型可暴力解决问题。以下是代码:
#include <iostream>
using namespace std;
long long func1(long long n,long long m){
long long result=0,temp=n,j=1;
while(temp){
result=result+j*(temp%m);
temp=temp/m;
j=j*10;
}
return result;
}
long long func2(long long n){
long long s=0;
while(n>0){
s=s*10+n%10;
n=n/10;
}
return s;
}
bool two(long long n){
long long x=func1(n,2);
long long y=func2(x);
if(x==y)
return true;
else
return false;
}
bool three(long long n){
long long x=func1(n,3);
long long y=func2(x);
if(x==y)
return true;
else
return false;
}
bool four(long long n){
long long x=func1(n,4);
long long y=func2(x);
if(x==y)
return true;
else
return false;
}
bool five(long long n){
long long x=func1(n,5);
long long y=func2(x);
if(x==y)
return true;
else
return false;
}
bool six(long long n){
long long x=func1(n,6);
long long y=func2(x);
if(x==y)
return true;
else
return false;
}
bool seven(long long n){
long long x=func1(n,7);
long long y=func2(x);
if(x==y)
return true;
else
return false;
}
bool eight(long long n){
long long x=func1(n,8);
long long y=func2(x);
if(x==y)
return true;
else
return false;
}
bool nine(long long n){
long long x=func1(n,9);
long long y=func2(x);
if(x==y)
return true;
else
return false;
}
int main(){
long long N[10000],S[10000];
int i=0,num=0;
while(cin>>N[i]>>S[i])
{
i++;
num++;
}
for(i=0;i<num;i++){
cout<<"Case"<<" "<<i+1<<":"<<endl; long long s=S[i]+1;
for(int ct=0;ct<N[i];){
int t=0;
if(s==func2(s))
t++;
if(two(s))
t++;
if(three(s))
t++;
if(four(s))
t++;
if(five(s))
t++;
if(six(s))
t++;
if(seven(s))
t++;
if(eight(s))
t++;
if(nine(s))
t++;
if(t>=2)
{
cout<<s<<endl;
ct++;
}
s++;
}
}
}