[USACO1.2.4]回文平方数 JAVA实现

9 篇文章 0 订阅

7-8 1.2.4 回文平方数

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

共一行,一个单独的整数 B(B 用十进制表示). 输出格式:

每行两个数字,第二个数是第一个数的平方,且第二个数是回文数.(注意:这两个数都应该在 B 那个进制下) 输入样例:

在这里给出一组输入。例如:

10

输出样例:

在这里给出相应的输出。例如:

1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202
40804 212 44944 264 69696

这题主要是进制换算比较麻烦

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner= new Scanner(System.in);
        int B =scanner.nextInt();
        for (int i = 1;i<=300;i++){
            StringBuffer num1= convert(i,B);
            StringBuffer num2= convert(i*i,B);
            if (isPalin(num2)){
                System.out.println(num1+" "+num2);
            }
        }
    }
    public static boolean isPalin(StringBuffer s){
        for (int i=0;i<s.length()/2;i++){
            if(s.charAt(i)!=s.charAt(s.length()-i-1)){
                return false;
            }
        }
        return true;
    }
    public static StringBuffer convert(int num,int B) {
        StringBuffer rtnval = new StringBuffer();
        int digit;
        while (num > 0) {
            digit = num % B;
            if (digit >= 10) {
                rtnval.append((char) ('A' + digit - 10));
            } else {
                rtnval.append(digit);
            }
            num /= B;
        }
        return rtnval.reverse();//翻转以后得到
    }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值