洛谷1206 迴文平方數
本題地址: http://www.luogu.org/problem/show?pid=1206
題目描述
迴文數是指從左向右念和從右向左念都一樣的數。如12321就是一個典型的迴文數。
給定一個進制B(2<=B<=20,由十進制表示),輸出所有的大於等於1小於等於300(十進制下)且它的平方用B進製表示時是迴文數的數。用’A’,’B’……表示10,11等等
輸入輸出格式
輸入格式:
共一行,一個單獨的整數B(B用十進制表示)。
輸出格式:
每行兩個B進制的符合要求的數字,第二個數是第一個數的平方,且第二個數是迴文數。
輸入輸出樣例
輸入樣例#1:
10
輸出樣例#1:
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
說明
題目翻譯來自NOCOW。
USACO Training Section 1.2
額,我無語了,一個簡單的模擬題,但我在洛谷上AC的代碼(有圖爲證!)
居然在USACO上過不了,同樣的數據!我自己直接驗證也對啊···
USACO的評測系統不會有問題吧···
附上這不知對錯的代碼吧···
/*
ID: 保密
PROG: palsquare
LANG: C++
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
int b,k,l,l1;
char a[15],c[15];
char change(int x)
{
if(x<10)
return x+'0';
else
return (x-10)+'A';
}
int main()
{
freopen("palsquare.in","r",stdin);
freopen("palsquare.out","w",stdout);
bool flag;
int i,j;
cin>>b;
for(i=1;i<=300;i++)
{
k=i;
l1=0;
while(k>0)
{
l1++;
c[l1]=change(k%b);
k/=b;
}
k=i*i;
l=0;
while(k>0)
{
l++;
a[l]=change(k%b);
k/=b;
}
flag=false;
for(j=1;j<=l/2;j++)
if(a[j]!=a[l-j+1])
{
flag=true;
break;
}
if(flag==false)
{
for(j=l1;j>=1;j--)
cout<<c[j];
cout<<" ";
for(j=l;j>=1;j--)
cout<<a[j];
cout<<endl;
}
}
return 0;
}
//如果誰發現BUG,重重有賞!