本文主要向大家介绍了JAVA语言:正整数A+B(Java)PAT团体程序设计题解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:

输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:

如果输入的确是两个正整数,则按格式“A + B = 和”输出。如果某个输入不合要求,则在相应位置输出“?”,显然此时和也是“?”。

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

22 . 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla…33

输出样例3:

? + ? = ?

大家注意看题目中的那个“注意”:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

我刚开始还没死磕这个地方,就认为输入两个数或是字符串,用第一个空格分割,因为B可能是个字符串,中间也有空格。于是就写了两个输入,然后再判断,结果有个测试点就是过不去。

后来,我就看网上别人说的这个“注意”,题目说B不是一个空串,可能就隐含着A可能是一个空串,而且首先就输入一个空格,然后直接输入B。A为空。于是我就改了下代码,先判断第一个字符是不是空格,然后就过了。

import java.util.Scanner;

import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

// 先默认都是 '?'

String A = "?";

String B = "?";

String result = "?";

// 直接读取一行

String temp = scanner.nextLine();

// 如果输入的第一个字符就是空格

if (temp.charAt(0) == ' ') {

// 就认为 A为空,空格后面就是 B

B = temp.substring(1);

} else {

// 如果第一个字符不是空格,就可以认为有两个字符串

// 用空格分割一次

String[] temps = temp.split(" ", 2);

A = temps[0];   // 第一个是 A

B = temps[1];   // 第二个是 B

}

// 编辑正则表达式,匹配数字 0-9

Pattern pattern = Pattern.compile("[0-9]*");

boolean A_ok = false;

boolean B_ok = false;

// 因为正常的 A,B in [1, 1000],所以先从字符串长度判断,然后判断是不是数字

// 如果是数字,再判断是不是在 [1, 1000]

if (A.length() > 4 || !pattern.matcher(A).matches() ||

Integer.parseInt(A) < 1 || Integer.parseInt(A) > 1000) {

// 只要一个条件满足 ,A 就是错误字符

A = "?";

} else {

// 否则 A 就是符合条件的整数,标记一下

A_ok = true;

}

// 同判断 A 一样

if (B.length() > 4 || !pattern.matcher(B).matches() ||

Integer.parseInt(B) < 1 || Integer.parseInt(B) > 1000) {

B = "?";

} else {

B_ok = true;

}

// 如果 A 、B 都符合条件,就计算和

if (A_ok && B_ok) {

int sum = Integer.parseInt(A) + Integer.parseInt(B);

result = String.valueOf(sum);

}

// 输出结果

System.out.println(A + " + " + B + " = " + result);

}

}

可是后来看了一下别人的代码,发现并没有判断第一个字符是否为空格。比如先输入一个空格,再输入一个整数,控制台还会继续等待输入。这样提交后,发现也是都对的。

#include

// 如果是1-1000的正整数, 则返回正确值;否则返回 -1

int convert(const char *str)

{

int sum = 0;

for (int i = 0; str[i] !='\0'; i++)

{

// 如果是数字

if(str[i] >= '0' && str[i] <= '9')

{

// 如果数字长度超过4位

if (i > 4) {

return -1;

}

sum = sum * 10 + str[i] - '0';

}

else

{

// 否则返回 -1

return -1;

}

}

if(sum >= 1 && sum <= 1000)

{

return sum;

}

return -1;

}

int main()

{

char A[10000], B[10000];

int a, b;

// 输入A,到第一个空格就停止

scanf("%s ", A);

// 输入B,到行尾

gets(B);

// 转换判断

a = convert(A);

b = convert(B);

// 输出

if (a == -1)

{

printf("? + ");

}

else

{

printf("%d + ", a);

}

if (b == -1)

{

printf("? = ");

}

else

{

printf("%d = ", b);

}

if (a == -1 || b == -1)

{

printf("?\n");

}

else

{

printf("%d\n", a + b);

}

return 0;

}

最后我发现,并不是那个条件的原因,不用管A是否为空,还是正常读取,不过我修改了一下输入,最终也通过了:

import java.util.Scanner;

import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

// 输入A,到第一个空格就停止

String A = scanner.next();

// 输入B,到第二个空格

// 如果直接使用 String B = scanner.nextLine(); 会出错

// 它把 A 后面的那个空格也一起读取了,会对B的判断出错

// 修改一下,分开读,如果B后面还有字符串,就是不合法

String B = scanner.next();

String afterB = scanner.nextLine();

String result = "?";

// 编辑正则表达式,匹配数字 0-9

Pattern pattern = Pattern.compile("[0-9]*");

boolean A_ok = false;

boolean B_ok = false;

// 因为正常的 A,B in [1, 1000],所以先从字符串长度判断,然后判断是不是数字

// 如果是数字,再判断是不是在 [1, 1000]

if (A.length() > 4 || !pattern.matcher(A).matches() ||

Integer.parseInt(A) < 1 || Integer.parseInt(A) > 1000) {

// 只要一个条件满足 ,A 就是错误字符

A = "?";

} else {

// 否则 A 就是符合条件的整数,标记一下

A_ok = true;

}

// 如果B的长度大于4,或者包含非数字,或不在[1, 1000]范围内,或者B后面还有字符,都算非法

if (B.length() > 4 || !pattern.matcher(B).matches() ||

Integer.parseInt(B) < 1 || Integer.parseInt(B) > 1000 ||

afterB.length() > 0) {

B = "?";

} else {

B_ok = true;

}

// 如果 A 、B 都符合条件,就计算和

if (A_ok && B_ok) {

int sum = Integer.parseInt(A) + Integer.parseInt(B);

result = String.valueOf(sum);

}

// 输出结果

System.out.println(A + " + " + B + " = " + result);

}

}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

正整数 java_JAVA语言:正整数A+B(Java)PAT团体程序设计题解相关推荐

  1. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L1 答案

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L1 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 标号 标题 分数 通过数 提交数 通过率 L1-001 Hello World 5 46779 1 ...

  2. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L3 答案 顶着满课,整整一星期,终于咕完了.(:´д`)ゞ 知识点分类(23): 1.搜索模拟(5):BFS,DFS,最短路,路径打印 2.计算几 ...

  3. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L2 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 知识点分类(32): 1.树锯结构(9):二叉树的存储,编号,遍历顺序转换,求深度,底层节点,从底 ...

  4. L1-074 两小时学完C语言 (5 分)-PAT 团体程序设计天梯赛 GPLT

    知乎上有个宝宝问:"两个小时内如何学完 C 语言?"当然,问的是"学完"并不是"学会". 假设一本 C 语言教科书有 N 个字,这个宝宝每分 ...

  5. l1-047. 装睡c语言,L1-047 装睡 (10 分)- PAT团体程序设计天梯赛

    L1-047 装睡 (10 分) 你永远叫不醒一个装睡的人 -- 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-7 ...

  6. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT

    本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...

  7. [Python] L1-005. 考试座位号-PAT团体程序设计天梯赛GPLT

    L1-005. 考试座位号 每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号 ...

  8. L2-027 名人堂与代金券-PAT团体程序设计天梯赛GPLT

    对于在中国大学MOOC学习"数据结构"课程的学生,想要获得一张合格证书,总评成绩必须达到 60 分及以上,并且有另加福利:总评分在 [G, 100] 区间内者,可以得到 50 元 ...

  9. L1-050 倒数第N个字符串-PAT团体程序设计天梯赛GPLT

    给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增.例如当 L 为 3 时,序列为 { aaa, aab, aac, . ...

最新文章

  1. 【独家】去哪儿网PRD兵法秘籍大公开,火爆课程精彩直击!
  2. java学习(159):两个线程共同完成1到100计算
  3. 灵魂拷问!mysqlproxy配置
  4. Jedis 常用API使用
  5. ArcGIS应用(十六)Arcgis 点对连线制作航空线路图
  6. html5 扩展 cs6,Dreamweaver CS6提高了HTML5工具的效率
  7. 盟军敢死队I:深入敌后--秘籍
  8. Moblin v2开发环境设置——创建一个新应用程序
  9. 【时间函数】gettimeofday
  10. [《关于外婆家的一些记忆》闲笔记事集]2012年1月22日
  11. 小程序中子组件父/组件互相传值以及互相接收
  12. Linux下磁盘常见错误分析与检测工具使用
  13. Java --- Xstream使用
  14. 渡过“去小米化”阵痛期,华米科技能否自立?
  15. 零跑汽车迎难而上,坚持全域自研战略指引
  16. day48 - 49
  17. 【笔记整理】通信原理第九章复习——循环码
  18. C语言的数据类型详解及应用
  19. Thymeleaf模板使用实例+模板分页
  20. 浅析测试计划,测试方案及测试策略

热门文章

  1. Sentinel限流规则
  2. NofairSync.tryAcquire
  3. 创建订单 - 填充新订单数据
  4. Properties作为Map集合的特有方法
  5. 微信扫描登录(获取扫描人信息)
  6. 线程池原理与自定义线程池
  7. TCC事务补偿机制实现分布式事务控制介绍
  8. 通过反射获取私有构造方法并使用
  9. 注解_自定义注解_元注解
  10. RequestBody注解