BigInteger的进制转换题

A+B Problem III

背景

新一年的OO课程开始了,HansBug准备给大家寒假增添一点乐趣。

题目描述

这是一个很简单的问题,即求两个十进制整数的和。然而这一次,事情有那么两点不同

输入格式

输入包含三行。

第一行包含两个整数 A A A a a a,其中 a a a为一个 A A A进制整数。

第二行包含两个整数 B B B b b b,其中 b b b为一个 B B B进制整数。

第三行包含一个整数 C C C

输出格式

一行,包含一个 C C C进制整数,即为 a + b a+b a+b

样例

#输入输出解释
110 1
10 2
10
3显然。
23 10000
4 20000
5
4333 ( 10000 ) 3 = 81 {\left(10000\right)}_3 = 81 (10000)3=81
( 20000 ) 4 = 512 {\left(20000\right)}_4 = 512 (20000)4=512
81 + 512 = 593 = ( 4333 ) 5 81 + 512 = 593 = {\left(4333\right)}_5 81+512=593=(4333)5
38 1234567012345670
16 -123456789abcdef0
10
-1311722512518943544显然。

说明

约束信息

  • 保证所有输入的整数合法(但是可以包含一个正号或者负号)
  • 保证所有出现的进制不大于 35 35 35,且不小于 2 2 2
  • 保证所有输入的整数满足去除开头的正负号后长度不超过 10 5 {10}^5 105
  • 不保证各个分隔处仅包含一个空格
  • 不保证数字中的字母只包含大写或者小写
  • 输出中请不要包含包含多余的正负号

需要先学习的技能

  • 基本的Java语法
  • Java的基本io操作(推荐使用Scanner
  • Java的基本整数数据类型
  • (二选一)Java的数组基本操作 / Java的高精度数据类型(具体可以百度)
  • Java的基本字符串操作
  • 代码的复用
  • 如果你不知道进制是什么意思的话,可以去百度一下
import java.util.Scanner;
import java.math.*;
public class E {
    public static void main(String args[]) {
        Scanner scan=new Scanner(System.in);
        String str=new String();
        int c=0;

        if(scan.hasNextLine()){
            str=scan.nextLine();
        }
        String str_a=str.trim();//用trim()方法去除字符串首位的空格
        String aa[]=str_a.split("\\s+");//去掉首尾空格后字符串就只剩中间那些空格,用split方法就可以把字符串拆成两个不含空格的字符串

        if(scan.hasNextLine()){
            str=scan.nextLine();
        }
        String str_b=str.trim();
        String bb[]=str_b.split("\\s+");

        if(scan.hasNextInt()){
            c=scan.nextInt();
        }
        
        BigInteger a=change(aa[0],aa[1]);
        BigInteger b=change(bb[0],bb[1]);
        BigInteger sum=a.add(b);
        String str_sum=sum.toString(c);//把和按c进制转成字符串

        System.out.println(str_sum);


    }
    public static BigInteger change(String x,String xg){
        int i_xg=Integer.valueOf(xg);
        BigInteger bi_x=new BigInteger(x,i_xg);//按进制xg解释原字符串,并返回解释后的字符串,返回的字符串统一是十进制

        return bi_x;
    }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值