8 正整数A+B (15分)

8 正整数A+B (15分)

题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:

输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
输出格式:

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。
输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

  1. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla…33

输出样例3:

? + ? = ?

#include 
#include 
#include 
#include 

int pow(int x,int y);
using namespace std;

int main()
{
    char a[10086],b[10086];
    int flag1 = 1,flag2 = 1,n,m;
    int x=0,y=0;
    scanf("%s ",a);
    gets(b);
    n = strlen(a);
    m = strlen(b);
    for(int i = 0;i < n;i ++)
        if(a[i]>='0'&&a[i]<='9');
        else
        {flag1 = 0;break;}
    for(int i = 0;i < m;i ++)
        if(b[i]>='0'&&b[i]<='9');
        else
        {flag2 = 0;break;}
    if(flag1 == 1&&flag2 == 1)
    {
        for(int i = n; i >= 1;i --)
        {
            x += (a[n-i]-48)*pow(10,i-1);
        }
        for(int i = m; i >= 1;i --)
        {
            y += (b[m-i]-48)*pow(10,i-1);
        }
        if(x>=1&&x<=1000&&y>=1&&y<=1000)
            cout<" + "<" = "<else if(x<1&&y>=1&&y<=1000)cout<<"?"<<" + "<" = "<<"?"<else if(x>1000&&y>=1&&y<=1000)cout<<"?"<<" + "<" = "<<"?"<else if(x>=1&&x<=1000&&y<1)cout<" + "<<"?"<<" = "<<"?"<else if(x>=1&&x<=1000&&y>1000)cout<" + "<<"?"<<" = "<<"?"<else if(flag1 == 0&&flag2 == 0)
        cout<<"?"<<" + "<<"?"<<" = "<<"?"<else if(flag1 == 0)cout<<"?"<<" + "<" = "<<"?"<else cout<" + "<<"?"<<" = "<<"?"<return 0;
}

int pow(int x,int y)
{
    int X;
    X=x;
    if(y == 0)x = 1;
    else y=y-1;
    while(y--)
        x*=X;
    return x;
}

你可能感兴趣的:(天梯赛训练(各种补题))