B - 学密码学真的得学程序

来源:互联网 发布:vscode常用react插件 编辑:程序博客网 时间:2024/06/05 18:06
B - 学密码学真的得学程序
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu
Submit Status Practice SDUTOJ 2464

Description

话说,上次ZYJ同学最终在众位玛丽亚的帮助下搞定了那个神奇的字符串,然后神奇的事情发生了,字符串下面竟然有一个通道,ZYJ满怀激动的走下了通道。然而,不得不说,ZYJ同学是悲剧的,为什么呢,因为他走进了一个进制迷宫(谁让他乱闯的来着。。。。。),进制迷宫里有好多好多密码门。他很沮丧,因为他无法破解密码门的密码。这个时候WL看不下去了,于是降下神通,告诉ZYJ,每个密码门上都有一个数字a,那代表这个密码门是a进制的。密码门的密码即为所有小于等于300(这个300是十进制数)的正整数的平方在a进制下是回文串的所有数的和。密码门的密码是a进制的。用A表示10,B表示11,C表示13。。。。。。。

ZYJ竟然没听懂是什么意思,好吧,举个例子来说,如果a为2,那么所有小于等于300的正整数中只有1和3的平方(分别为1和9)在2进制中为回文串(1的二进制为1,是回文串,9的二进制是1001,也是回文串),所以这个密码门的密码是100(1+3=4,4在2进制下是100);

Input

 

第一行输入一个n代表有n扇门。

接下来的n行,每一行都有一个数字a(1<a<20),代表这扇门为a进制。

Output

 

输入每扇门的密码,每扇门的密码占一行。

Sample Input

2102
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;char node[19]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I'};int f;char s[20];void turn(int n,int a){    int num;    num=0;    while(n/a!=0)    {        s[num]=node[n%a];        num++;        n=n/a;    }    s[num++]=node[n];    s[num]='\0';    }    int huiwen()    {        int i,len;        f=1;        len=strlen(s);        for(i=0;i<len/2;i++)        {            if(s[i]!=s[len-1-i])            {                f=0;                break;            }        }        return f;    }    int main()    {        int sum,n,i,a;        scanf("%d",&n);        while(n--)        {            scanf("%d",&a);            sum=0;            for(i=1;i<=300;i++)            {                turn(i*i,a);                if(huiwen())                {                    sum+=i;                }            }            turn(sum,a);            int l=strlen(s);            for(i=l-1;i>=0;i--)            {                printf("%c",s[i]);            }            printf("\n");        }        return 0;    }


0 0
原创粉丝点击