USACO 1.2.4 Palindromic Squares

本題的關鍵是進制轉換,如何將10進制數轉換爲B進制(2<=B<=20),大於9的數字用大寫字母表示(類似16進制)。程序關鍵在於進制轉換函數的書寫。

代碼如下:


/*
ID: michael139
LANG: C
PROG: palsquare
*/
#include<stdio.h>
#include<string.h>
int tenToB(int ten,char B[150],int b);
int main () {
    FILE *fin  = fopen("palsquare.in", "r");
    FILE *fout = fopen("palsquare.out", "w");
    int b,i,j,len,ok;
    char B[150],B2[150];
    while (fscanf(fin,"%d",&b) != EOF) {
        for (i=1;i<=300;i++) {
            len = tenToB(i*i,B,b);
            ok = 1;
            for (j=0;j<len/2;j++) {
                if (B[j]!=B[len-j-1]) {
                    ok = 0;
                    break;
                }
            }
            if (ok) {
                tenToB(i,B2,b);
                fprintf(fout,"%s %s\n",B2,B);
            }
        }
    }
    return 0;
}
int tenToB(int ten,char B[150],int b) {
    int i,len = 0,bit;
    char TB[150];
    while (ten!=0) {
        bit = ten % b;
        if (bit<=9) {
            TB[len++] = bit+'0';
        } else {
            TB[len++] = bit-10+'A';
        }
        ten /= b;
    }
    for (i=len-1;i>=0;i--) B[len-i-1] = TB[i];
    B[len] = '\0';
    return len;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章