一年之際在于春,新年的第一天,大家敲代碼了嗎?哈哈
前言
這道題分值是15分,值這個分,有一小點運算,難度不大,雖然說做出來了,但是有兩個小疑點。
L1-025 正整數A+B
題的目標很簡單,就是求兩個正整數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:
? + ? = ?
OK,以上就是所有的題目內容了,題目所說的是計算兩個正整數加分,兩個正整數的取值范圍是1~1000,不符合以上要求的值在輸出?
,結果對應的也輸出?
下面看看代碼吧
代碼
#include <stdio.h>
#include <string.h>
int panduan(char num[])//計算并且判斷輸入的數字是否符合要求
{int number = 0;int l = strlen(num);if(l>4) return -1;\\長度else{for(int i = 0;i < l;i++){if(num[i] >= '0'&&num[i] <= '9')number = number*10 + (num[i] - '0');//符合要求計算else return -1;}}if(number < 1||number > 1000)return -1;//所有-1都是不符合要求的else return number;//返回輸入的數字
}int main()
{char num1[100] = {0};char num2[100] = {0};//定義兩個數組存儲輸入的數字scanf("%s ",&num1);// gets(num1);gets(num2);//這里有一個小問題,后面展開說一下int number1 = panduan(num1);int number2 = panduan(num2);//接收兩個輸入的值//判斷并且輸出,為-1的話就輸出?,不是-1的話就正常輸出if(number1 == -1&&number2 == -1)printf("? + ? = ?");else if(number1 == -1&&number2)printf("? + %d = ?",number2);else if(number1&&number2 == -1)printf("%d + ? = ?",number1);else if(number1&&number2)printf("%d + %d = %d",number1,number2,number1+number2);
}
上面在輸入的地方,注釋掉了一部分,那里有一點問題,感覺這幾個輸入都差不多一樣的分別來看一下,大家也想一下為什么不行
scanf("%s %s",&num1,&num2);
以上這種輸入的話,會得到
的一個結果
如果
gets(num1);
gets(num2);
這樣輸入的話,就會得到下面
的結果
都會出錯,但是都有分,下面的這個正確的好像是輸出了一個? + ? = ?
的兩分,說實話沒什么用,跟沒分沒什么區別了也
以上所有代碼均為自己編寫,本人水平有限,如果有哪里出錯或者有更好的解法可以與我私信或在評論區里進行討論
上一題:團體程序設計天梯賽-練習集——L1-024 后天
下一題:團體程序設計天梯賽-練習集——L1-026 I Love GPLT