码迷,mamicode.com
首页 > 其他好文 > 详细

CCCC 正整数A+B

时间:2017-03-20 22:13:24      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:space   简单   print   位置   ++i   问题   clu   正整数   substr   

题意:

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

输入格式:

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

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

输出格式:

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

分析:这题很坑。

1、A和B都在区间[1,1000]。

2、前导0也算不合要求。

#include<bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
string s;
int ans;
bool judge(string x){
    ans = 0;
    int len = x.size();
    for(int i = 0; i < len; ++i){
        if(i == 0 && x[i] == ‘0‘) return false;
        if(x[i] >= ‘0‘ && x[i] <= ‘9‘){
            ans = ans * 10 + (x[i] - ‘0‘);
        }
        else return false;
    }
    if(ans > 1000 || ans == 0) return false;
    return true;
}
int main(){
    getline(cin, s);
    int len = s.size();
    string x;
    string y;
    for(int i = 0; i < len; ++i){
        if(s[i] == ‘ ‘){
            x = s.substr(0, i);
            y = s.substr(i + 1, len);
            break;
        }
    }
    bool ok = true;
    int tmp = 0;
    if(judge(x)){
        printf("%d + ", ans);
        tmp += ans;
    }
    else{
        ok = false;
        printf("? + ");
    }
    if(judge(y)){
        printf("%d = ", ans);
        tmp += ans;
    }
    else{
        ok = false;
        printf("? = ");
    }
    if(!ok) printf("?\n");
    else{
        printf("%d\n", tmp);
    }
    return 0;
}

  

CCCC 正整数A+B

标签:space   简单   print   位置   ++i   问题   clu   正整数   substr   

原文地址:http://www.cnblogs.com/tyty-Somnuspoppy/p/6591841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!