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。
样例
# | 输入 | 输出 | 解释 |
---|---|---|---|
1 | 10 1 10 2 10 | 3 | 显然。 |
2 | 3 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 |
3 | 8 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;
}
}