输入字符串,用正则表达式提取两个数字并相加(java)

A+B Problem II

背景

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

题目描述

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

输入格式

第一行包含两个十进制整数,用空格分隔,分别表示 a a a b b b

对于

输出格式

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

如果输入的数据不合法,则需要输出WRONG FORMAT!

样例

#输入输出解释
11 23显然。
210000 2000030000更加显然。
3-10000000000 -20000000000-30000000000非常显然。
4-+10000 300000WRONG FORMAT!-+10000整数格式错误。
5-10000 3000 123WRONG FORMAT!包含的整数个数不是两个,格式错误。

说明

约束信息

  • 不保证所有输入的数合法
    • 对于一个整数的合法性,判定标准定义为:对于一个整数,应该由一个或多个连续的0~9数字构成(允许任意数量的前导零),且数字开头可以包含一个正号(+)或者(-)。
    • 对于输入数据的行内,应当包含且仅包含两个合法的整数。
    • 如果输入数据违反了上述两条,则需要输出WRONG FORMAT!
  • 保证所有输入的合法整数满足 ( − 1 0 100000 + 1 ) ≤ a , b ≤ ( 1 0 100000 − 1 ) \left( -10^{100000}+1 \right) \leq a, b \leq \left( 10^{100000}-1\right) (10100000+1)a,b(101000001)
  • 不保证 a a a b b b之间仅包含一个空格
  • 输出中请不要包含多余的正负号

需要先学习的技能

  • 基本的Java语法
  • Java的基本io操作(推荐使用Scanner
  • Java的基本整数数据类型
  • (二选一)Java的数组基本操作 / Java的高精度数据类型(具体可以百度)
  • 正则表达式的基本使用


    这是北航6系面向对象的寒假作业,由于我不是6系的,没助教帮我评测,所以以下代码不保证能完全通过(菜哭呜呜呜)
import java.math.BigInteger;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class second {
    public static void main(String[] args){
        String reg1="\\s{0,}(\\+|\\-)?\\d+\\s{1,}(\\+|\\-)?\\d+\\s{0,}";
        Scanner scan=new Scanner(System.in);
        String str=new String();
        char x='\0';
        if(scan.hasNextLine()){
            str=scan.nextLine();//
        }

        Pattern p=Pattern.compile(reg1);
        Matcher m=p.matcher(str);
        if(!m.matches()){
            System.out.println("Wrong Format");
        }
        else{
            String newstr=str.trim();
            System.out.println(newstr);
            String bb[]=newstr.split("\\s+");//多个空格为分隔符拆分为字符串数组
            BigInteger num0[]=new BigInteger[bb.length];
            for(int i=0;i<bb.length;i++){
                num0[i]=new BigInteger(bb[i],10);
            }
            BigInteger sum;
            sum=num0[0].add(num0[1]);
            System.out.println(sum);
        }

    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值