C语言:7-22 正整数A+B(15分)

发布于:2022-12-20 ⋅ 阅读:(512) ⋅ 点赞:(0)

题的目标很简单,就是求两个正整数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>
#include <math.h>

int main()
{
	char s[10010];
	int flag1=0,flag2=0; 
	//flag1用于标记前面字符串是否为整数,flag2用于标记后面字符串是否为整数。0则为整数,1则不是。 
	while(gets(s) != '\0')
	{
		int len=strlen(s);
		int blank;
		for(int i=0;i<len;i++)
		{
			if(s[i] == ' ')
			{
				blank=i;  //标记第一个空格出现的位置; 
				break;
			}
		}
		for(int i=0;i<blank;i++)
		{
			if(s[i]<'0' || s[i]>'9')
			{
				flag1=1;
			}
		}
		for(int i=blank+1;i<len;i++)
		{
			if(s[i]<'0' || s[i]>'9')
			{
				flag2=1;
			}
		}
		int s1=0,s2=0;
		if(flag1==0)
		{
			for(int i=0;i<blank;i++)
			{
				s1 += (s[i]-'0')*pow(10,blank-1-i);
			}
			if(s1==0 || s1>1000)
			{
				flag1=1;
			}
		}
		if(flag2==0)
		{
			for(int i=blank+1;i<len;i++)
			{
				s2 += (s[i]-'0')*pow(10,len-1-i);
			}
			if(s2==0 || s2>1000)
			{
				flag2=1;
			}
		}
		if(flag1==0)
		{
			printf("%d",s1);
		}
		else 
		{
			printf("?");
		}
		printf(" + ");
		if(flag2==0)
		{
			printf("%d",s2);
		}
		else
		{
			printf("?");
		}
		printf(" = ");
		if(flag1==0 && flag2==0)
		{
			printf("%d",s1+s2);
		}
		else
		{
			printf("?");
		}
		printf("\n");
	}
	return 0;
}

补充: 

 1.gets 函数:

        #include <stdio.h>

        #include <string.h>

        {

                char s[21];

                gets(s);

                return 0;

        }        

2.strlen函数:

#include <stdio.h>
#include <string.h>

int main() 
{
    char s[10]="asdfg";
    int len = strlen(s);
    
    printf("%d",len);  //len->5
    return 0;
}

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到