L1-025. 正整数A+B-PAT团体程序设计天梯赛GPLT

先来表示一下对 柳婼的感谢:https://blog.csdn.net/liuchuo/article/details/51985763
今天好几次样例有没通过的,看了她的题解之后慢慢都找到了问题出在哪里。
总结:
1.写东西有重复的地方就写一个函数,修改快。
2.B不是空字符串不代表A不是空字符串。
3.A和B用空格隔开不代表B会和之后的字符也用空格隔开,<==>空格之后的都属于B
#include<cstdio>
#include<iostream>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
long long r1=0;//因为担心超出int范围——“可能是超出范围的数字”
int flag=1;//判断最终答案是否正常
void opt(char *s)
{
	int i;
	long long ans;
	for(i=0;i<strlen(s);i++)
	{
		if(s[i]>='0'&&s[i]<='9');//其实用!=比较好
		else 
		break;//不写break会出毛病的
	}
	if(i==strlen(s))
	{
		ans=atol(s);
		if(ans>=1&&ans<=1000)
                    //范围判断,注意ans是有必要的,如果ans>INT_MAX,
                //ans=atol(s);会出问题的
{r1+=ans;cout<<ans;}else {flag=0;cout<<'?';}}else {flag=0;cout<<'?';}}int main(){int i,j;char a[1000],b[1000],c[1000];memset(a,'\0',sizeof(a));memset(b,'\0',sizeof(b));memset(c,'\0',sizeof(c));gets(c);for(i=0;;i++){if(c[i]!=' ')//第一个空格之前的字符给aa[i]=c[i];else break;//记得写退出}for(j=i+1;;j++){if(c[j]!='\0')//剩下全部给Bb[j-i-1]=c[j];else break;}opt(a);cout<<" + ";opt(b);cout<<" = ";if(flag) cout<<r1;else cout<<'?'; return 0;}

猜你喜欢

转载自blog.csdn.net/qq_40822492/article/details/79661759