PTA| L1-025 正整数A+B (有坑点)

版权声明:欢迎转载博客(转载时请附上原文链接^_^) https://blog.csdn.net/OneLine_/article/details/87949240

还是补寒假作业ing......

本来以为A+B很简单的 没想到错了n多次

上题目

L1-025 正整数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:

? + ? = ?

最初的思路就是

先用scanf读入空格前的一串字符串

再用scanf读入空格后的剩余字符串

计算字符串长度

判断所有字符都是 0 ~ 9之内的数

同时字符串形成的数字范围在【1,1000】之间

但是这样的话 若是空格后的字符中仍存在字符 则缺少读入

例如: 123 3 4

输出结果应该是 123 + ?= ?

(后一串字符不符合要求)

思考了一波之后 (借鉴网上的答案)

决定用 gets 读入

但是! 还是不行 

(不知道大佬们是怎么用gets过的)

 所以 又学(bai)习(du)了一波

看到一个很有用的东东

如下图

 so 把scanf输入改动一下 

这样就过了

放代码

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
using namespace std;
int main()
{
    char a[1000],b[1000];
    int sum1=0,sum2=0;
    bool flag1 =true,flag2=true;
    int len1,len2;
    scanf("%s",a);
    len1 = strlen(a);
    for (int i=0;i<len1;i++)
    {
        if (a[i]>'9'||a[i]<'0')
            flag1=false;
    }
    if (flag1)
    {
        sum1=a[0]-'0';
        for (int i=1;i<len1;i++)
            sum1=sum1*10+(a[i]-'0');
    }
     getchar();
    scanf("%[^\n]",b);
    len2 = strlen(b);
    for (int i=0;i<len2;i++)
    {
        if (b[i]>'9'||b[i]<'0')
            flag2=false;
    }
    if (flag2)
    {
        sum2 = b[0]-'0';
        for (int i=1;i<len2;i++)
            sum2 = sum2*10+(b[i]-'0');
    }
//    printf("%d %d ",len1,len2);
    if (flag1&&sum1>=1&&sum1<=1000)
        printf("%d + ",sum1);
    else printf("? + ");
    if (flag2&& sum2>=1&&sum2<=1000)
        printf("%d = ",sum2);
    else printf("? = ");
    if (flag1&&sum1>=1&&sum1<=1000 && flag2&& sum2>=1&&sum2<=1000)
        printf("%d",sum1+sum2);
    else printf("?");
    return 0;
}

不定时更新~

猜你喜欢

转载自blog.csdn.net/OneLine_/article/details/87949240