USACO-Section1.2 Palindromic Squares

来源:互联网 发布:2016全球汽车销量数据 编辑:程序博客网 时间:2024/06/07 10:04

2017-05-31

题目大意:

回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。

样例输入:

10

样例输出:

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

题解:

该题主要是进制的转换,如何从十进制转换为任意进制。注意题目,要求输出数的B进制。

代码:

#include<iostream>#include<fstream>#include<cstring>using namespace std;char ch[] = {'0','1','2','3','4','5','6','7','8','9',            'A','B','C','D','E','F','G','H','I','J','K'};int n;int a = 1 , b = 300;char m[20]; char m2[20];int TenToB(int i,int b){    memset(m , 0, sizeof(m));    int temp = i;    int flag = 0;    while(temp != 0){        m[flag++] = ch[temp % b];        temp /= b;    }    return  flag;} bool Judge(){    int i;    int len = strlen(m);    int flag = 0;    memset(m2 , 0, sizeof(m2));    for(i = 0;i < len;i++){        m2[i] = m[len - 1 - i];    }    for(i = 0;i < len ;){        if(m2[i] == m[i]){            i++;        }else{            break;        }    }    if(i == len){        return true;    }else{        return false;    }}int main(){    ofstream cout("palsquare.out");    ifstream cin("palsquare.in");    cin >> n;    char ans[20];    int rem;    for(int t = 1;t <= 300 ;t++){        memset(ans , 0, sizeof(ans));        int num = t * t;        rem = TenToB(t , n);        for(int i = 0;i < rem;i++){            ans[i] = m[i];        }        int flag = TenToB(num , n);        if(Judge()){            for(int j = rem - 1;j >= 0;j--){                cout << ans[j];            }            cout <<" ";            for(int j = 0;j < flag;j++){                cout << m2[j];            }            cout << endl;        }else{            continue;        }    }    return 0;}
原创粉丝点击