作者:mobiledu2502898167 | 来源:互联网 | 2017-05-12 15:45
USACO1.2.4PalindromicSquares为盲打1!为颈椎1!题意:……一点要注意,题目的意思是说1~300这些数字的平方转换成对应的进制时是回文数即可,但是!每行的第一个数字是用要求的进制来表示的!!!!!!!!一开始测试案例错了我还真没看懂。细节代
USACO 1.2.4 Palindromic Squares 为盲打1 !为颈椎1 ! 题意:……一点要注意,题目的意思是说1~300这些数字的平方转换成对应的进制时是回文数即可,但是!每行的第一个数字是用要求的进制来表示的!!!!!!!!一开始测试案例错了我还真没看懂。 细节代
USACO 1.2.4 Palindromic Squares
为盲打+1 !为颈椎+1 !
题意:……一点要注意,题目的意思是说1~300这些数字的平方转换成对应的进制时是回文数即可,但是!每行的第一个数字是用要求的进制来表示的!!!!!!!!一开始测试案例错了我还真没看懂。
细节+代码:
/*
ID: 15257142
LANG: C
TASK: palsquare
*/
#include
#include
#include
int n;
int trans(int num,char b[20]){
int k,g;
k = -1;
while(num>0){
k++;
g = num%n;
if(g>9)
b[k] = g-10+'A';
else
b[k] = g-0+'0';
num = num/n;
}
b[k+1] = '\0';
return k;
}
int transnum(int num,int n,char e[20]){
int k;
k = -1;
while(num>0){
k++;
if(num%n>9)
e[k] = num%n-10+'A';
else
e[k] = num%n+'0';
num = num/n;
}
return k;
}
int main(){ //太长了,一开始题意明确的话就不会现在这样……
freopen("palsquare.in","r",stdin);
freopen("palsquare.out","w",stdout);
int i,j,k,g,t,f;
char c[20],d[20],b[20],e[20];
scanf("%d",&n);
for(i = 1;i<=300;i++){
k = i*i;
g = trans(k,b);
for(j = 0;j<=g/2;j++)
c[j] = b[j];
c[j] = '\0';
if(g%2==1)
f = g/2+1;
else
f = g/2;
for(j = g;j>=f;j--)
d[g-j] = b[j];
d[g-j] = '\0';
if(strcmp(c,d)==0){
k = transnum(i,n,e);
for(j = k;j>=0;j--)
printf("%c",e[j]);
printf(" ");
printf("%s\n",b);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}