palsquare-section1.2

来源:互联网 发布:android 仿淘宝搜索 编辑:程序博客网 时间:2024/06/08 05:27

题目大意

给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。

输入格式

line 1:B(一个整数,表示进制)

输出格式

每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数.

样例输入

10

样例输出

1 12 43 911 12122 48426 676101 10201111 12321121 14641202 40804212 44944264 69696

题解

遍历十进制下1-300的所有数,将其平方用B进制表示,判断是否是回文数,如果是则按要求输出,不是则查看下一个

代码

#include<stdio.h>#include<string.h>int huiwen(char str[20],int len){int i;for(i=0;i<len;i++){    if(str[i]!=str[len-1-i])        return 0;}return 1;}/*char b(int a){char b;if(a<10)    b=a+'0';else    b='A'+a-10;printf("%c\n",b);return b;}*/int base(long int n,int m,char *str){char str1[20];int i=0,j=0;while(n){    if(n%m<10)    str1[i]=n%m+'0';    else        str1[i]=n%m-10+'A';    n=n/m;        //printf("%c\n",str1[i]);    i++;}i--;for(j=0;j<=i;j++){    str[j]=str1[i-j];}return i+1;}int main(){int B,i,j,len,len1;fscanf(fin,"%d",&B);char str[20],str1[10];for(i=1;i<=300;i++){    len=base(i*i,B,str);    if(huiwen(str,len))    {                    len1=base(i,B,str1);        for(j=0;j<len1;j++)            printf("%c",str1[j]);        printf(" ");        for(j=0;j<len;j++)            printffout,"%c",str[j]);        printf("\n");    }}return 0;}
原创粉丝点击