1. 程式人生 > >5-1 正整數A+B (15分)

5-1 正整數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<stdlib.h>
#include<string.h>
int main()
{
	char a[5];
	char b[5];
	int i;
	int sum1=0,sum2=0;
	int flag1=1;
	int flag2=1;
	scanf("%s",a);
	getchar();
	gets(b);
	int l1,l2;
	l1=strlen(a);
	l2=strlen(b);
	if(l1<1||l1>4)
	{
		flag1=0;
	}
	else
	{
	for(i=0;i<l1;i++)
	{
		if(a[i]<'0'||a[i]>'9')
		{
			flag1=0;
			break;
		}

	}
	}
	if(l2<1||l2>4)
	{
		flag2=0;
	}
	else{
	for(i=0;i<l2;i++)
	{
		if(b[i]<'0'||b[i]>'9')
		{
			flag2=0;
			break;
		}

	}
	}
	if(flag1==1)
	{
		for(i=0;i<l1;i++)
		{
			sum1=sum1*10+(a[i]-'0');
		}
	}
	if(sum1<1||sum1>1000)
	{
		flag1=0;
	}
	if(flag2==1)
	{
		for(i=0;i<l2;i++)
		{
			sum2=sum2*10+(b[i]-'0');
		}
	}
	if(sum2<1||sum2>1000)
	{
		flag2=0;
	}
	if(flag1==1 &&flag2==1)
	{
		printf("%d + %d = %d",sum1,sum2,sum1+sum2);
	}
	if(flag1==0 &&flag2==1 )
	{
		printf("? + %d = ?",sum2);
	}
	if(flag1==1 &&flag2==0 )
	{
		printf("%d + ? = ?",sum1);
	}
	if(flag1==0 &&flag2==0 )
	{
		printf("? + ? = ?");
	}
	return 0;
}