日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2024/4/11 java 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正整数 java_JAVA语言:正整数A+B(Java)PAT团体程序设计题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要向大家介紹了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团体程序设计题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。