正整数 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团体程序设计题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: s2-045 java_S2-045漏洞
- 下一篇: 怎样对java网站进行简单修改_用Jav