1. 程式人生 > 實用技巧 >7-184 正整數A+B (15 分)

7-184 正整數A+B (15 分)

7-184正整數A+B(15 分)

題的目標很簡單,就是求兩個正整數AB的和,其中AB都在區間[1,1000]。稍微有點麻煩的是,輸入並不保證是兩個正整數。

輸入格式:

輸入在一行給出AB,其間以空格分開。問題是AB不一定是滿足要求的正整數,有時候可能是超出範圍的數字、負數、帶小數點的實數、甚至是一堆亂碼。

注意:我們把輸入中出現的第1個空格認為是AB的分隔。題目保證至少存在一個空格,並且B不是一個空字串。

輸出格式:

如果輸入的確是兩個正整數,則按格式A + B = 和輸出。如果某個輸入不合要求,則在相應位置輸出?,顯然此時和也是?

輸入樣例1:

123 456

輸出樣例1:

123 + 456 = 579

輸入樣例2:

22. 18

輸出樣例2:

? + 18 = ?

輸入樣例3:

-100 blabla bla...33

輸出樣例3:

? + ? = ?
#include <stdio.h>
#include <string.h>
#define MAX 100

int judge(const char *);
int main (){
    char str[MAX],a[MAX],b[MAX];
    scanf("%s ",a);
    gets(b);
    int ai , bi ;
    ai =  judge(a);
    bi = judge(b);
    
if ( ai == -1 && bi == -1) printf("? + ? = ?"); else if (ai == -1 ) printf("? + %d = ?",bi); else if (bi == -1) printf("%d + ? = ?",ai); else printf("%d + %d = %d",ai,bi,ai+bi); return 0 ; } int judge( const char *t){//判斷並取值 int i,ret,len; ret
= 0; len = strlen(t); if (len <1 || len >4) ret = -1; else { for ( i=0 ; i<len ; i++){ if ( t[i] >= '0' && t[i] <= '9') ret = ret * 10 + t[i] - '0'; else { ret = -1; break; } } } if ( ret < 1 || ret > 1000) ret = -1; return ret ; }