C语言题解:PTA-L1-025 正整数A+B

PTA-L1-025 正整数A+B (15分) 题解

题目:PTA-L1-025 正整数A+B (15分)
C语言题解:PTA-L1-025 正整数A+B_第1张图片

看题要注意的几点:

1.A和B都在区间【1,1000】内(所以字符串长度超过4,绝对不合要求)

2.A,B之间以第一个空格隔开 (A字符串中不会出现空格,B字符串中可能出现空格)

3.A,B字符串中不能出现除0~9以外的任意字符

4.A,B字符串的第一个字符不可以是负号(-)和零(0)

5.当以上情况排除后只要判断A,B字符串所表达的数字小于1000就可以了。再实现字符串到数字的转换,两数字相加就可以了


#include
#include
int qiuhe(char a[],int n){
                //用于实现从字符串转换成数字的操作
	int i,sum=0;
	for(i=0;i<n;i++){
     
		sum=sum*10+a[i]-48;
	}
	return sum;
}

int main()
{
     
	char a[20],b[20];
	
	//输入部分        // %s 之后还要输入一个空格!!!
	scanf("%s ",a);       //输入字符串(以第一个空格为AB分界)  scanf输入的字符串中 不可以 存在空格
	gets(b);                  //gets输入的字符串中 可以 存在空格
	
	//判断部分
	int n=strlen(a),m=strlen(b),i;
	if(n>4) {
                                  //判断A B是否超长 
		memset(a,'\0',sizeof(a));      //一个用于初始化的函数(头文件是:string.h)
		a[0]='?';
	}
	if(m>4) {
     
		memset(b,'\0',sizeof(b));
		b[0]='?';
	}
	
	
	for(i=0;i<n;i++){
                        //判断A B字符串中是否有除数字外的其他字符
		if(a[i]<'0'||a[i]>'9'){
     
			memset(a,'\0',sizeof(a));
			a[0]='?';
			break;
		}
	}
	 for(i=0;i<m;i++){
     
		if(b[i]<'0'||b[i]>'9'){
     
			memset(b,'\0',sizeof(b));
			b[0]='?';
			break;
		}
	}


	if(qiuhe(a,n)>1000||a[0]=='-'||a[0]=='0'){
              //判断A,B字符串所表达的数字是否小于1000,第一个字符是否会是0
		memset(a,'\0',sizeof(a));
			a[0]='?';
	}
	if(qiuhe(b,m)>1000||b[0]=='-'||b[0]=='0'){
     
		memset(b,'\0',sizeof(b));
			b[0]='?';
	}
	
	//输出部分
	if(a[0]=='?'||b[0]=='?')             //若有一个输入不合要求,和就输出 ? 
		printf("%s + %s = ?\n",a,b);
	else{
                                    //若均符合要求,这输出A B的和
		printf("%s + %s = %d\n",a,b,qiuhe(a,n)+qiuhe(b,m));
	}
	return 0;
 } 

C语言题解:PTA-L1-025 正整数A+B_第2张图片
注意:
1.字符串的输入:gets(a);—这一种输入方式可以输入空格
-------------------------scanf("%s",a);----这种输入方式不可以读取空格。
2.memset :头文件(string.h) 用于数组的初始化,可以把数组快速清零
---------------原型:void *memset(void *str, int c, sizeof n);
在上面的代码中我是用这个函数将 不合理的A B字符串 清零 ,然后把数组的第一个字符赋成 ‘ ?’字符

------------------------ 结束----------------------------
我想到哪,就写到哪了,如果有什么不对的地方,希望大家能指出来,蟹蟹。

你可能感兴趣的:(PTA题解,C语言)