L1-025 正整数A+B---题解

陈越大佬的题目让我很无语,这个bug,我启用了debug都改了将近2小时;呜呜呜,acm本就逆天而行,死在路上很正常;

坚持+努力,便可换得前程似锦在这里插入图片描述

题目链接
L1-025 正整数A+B

解题思路:
1.因为想到会有乱码,而且会有空格,就想到用一个很长的字符数组去储存A,B
2.先用alen,blen测A,B的长度,用两个变量布尔变量标记A,B是否合格
3.用三个for循环,第一个测A的长度,第二个测交界处的空格数量,第三个测B的长度
4.用两个for循环分别遍历A,B,标记里面非数字的字符,并改变标签bool变量的值
5.当两个bool变量为真用两个if语句,去计算A,B的数值大小
6.分情况讨论输出

#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
int main()
{
    char a[1000];   // 用一个很长的字符数组a[1000]去储存A,B
    memset(a,'\0',sizeof(a));
    cin.getline(a,1000);
    int alen=0,blen=0;  //用alen,blen测A,B的长度
    bool ajudge= true,bjudge= true;  //  用两个变量布尔变量标记A,B是否合格 
    for (int i = 0; a[i] !=' ' ; ++i) {
        alen++;   //  测A的长度
    }
    int flag=0,aflag=alen;
    for (int m = alen; a[m] ==' ' ; ++m) {
        flag++;  // 测交界处的空格数量
    }
    for (int j = alen+flag; a[j] !='\0' ; ++j) {
        blen++;  //测B的长度
    }
    for (int k = 0; k <alen ; ++k) {
        if (a[k]>'9'||a[k]<'0')
        {
            ajudge= false;   // 标记里面非数字的字符,并改变标签bool变量的值
            break;
        }
    }
    for (int l = alen+flag; a[l]!='\0' ; ++l) {
        if (a[l]>'9'||a[l]<'0')
            bjudge= false;  // 标记里面非数字的字符,并改变标签bool变量的值
    }
    int avalue=0,bvalue=0;
    if (ajudge)   // bool变量为真
    {
        int i=0;
        while (alen--)
        {
            avalue=avalue*10+a[i++]-'0';    // 计算A的值
        }
        if (avalue<1||avalue>1000)  //  判断是否范围越界
            ajudge= false;
    }
    if (bjudge)
    {
        int i=aflag+flag;
        while (blen--)
        {
            bvalue=bvalue*10+a[i++]-'0';
        }
        if (bvalue<1||bvalue>1000)
            bjudge= false;
    }     // 分情况讨论输出
    if (ajudge&&bjudge)   
    {
        cout<<avalue<<" "<<"+"<<" "<<bvalue<<" "<<"="<<" "<<avalue+bvalue<<endl;
    }
    if (!ajudge&&bjudge)
    {
        cout<<"?"<<" "<<"+"<<" "<<bvalue<<" "<<"="<<" "<<"?"<<endl;
    }
    if (ajudge&&!bjudge)
    {
        cout<<avalue<<" "<<"+"<<" "<<"?"<<" "<<"="<<" "<<"?"<<endl;
    }
    if (!ajudge&&!bjudge)
    {
        cout<<"?"<<" "<<"+"<<" "<<"?"<<" "<<"="<<" "<<"?"<<endl;
    }
    return 0;
}
发布了29 篇原创文章 · 获赞 58 · 访问量 4075

猜你喜欢

转载自blog.csdn.net/weixin_45882303/article/details/104881510