zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛-练习集-L1-025. 正整数A+B

    L1-025. 正整数A+B

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

    输入格式:

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

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

    输出格式:

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

    输入样例1:
    123 456
    
    输出样例1:
    123 + 456 = 579
    
    输入样例2:
    22. 18
    
    输出样例2:
    ? + 18 = ?
    
    输入样例3:
    -100 blabla bla...33
    
    输出样例3:
    ? + ? = ?

    只要处理掉是?的情况就行了:
    1、"超出范围的数字、负数、带小数点的实数、甚至是一堆乱码"
    2、只要一方是?和就是?
    做法:A和B是以空格隔开,所以我们要特判第一个字符,然后再用两个字符串存A和B,排除掉所有情况后把它们转换为数字输出,在转换成数字的时候还要判断一下是否超出1000,具体看代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define LL long long
     4 #define maxn 2000
     5 int main() {
     6     char s[maxn];
     7     gets (s);
     8     int len = strlen (s);
     9     int flag = 0;
    10     int flag2 = 0;
    11     string a = "", b = "";
    12     if (s[0] >= '1' && s[0] <= '9')
    13         a += s[0];
    14     else if (s[0] == ' ') {
    15         flag = 1;
    16         a = "?";
    17     } else
    18         a = "?";
    19     for (int i = 1; i < len; i++) {
    20         if (flag == 0) {
    21             if (s[i] == ' ') {
    22                 flag = 1;
    23             } else if ( (s[i] >= '0' && s[i] <= '9') && a != "?") {
    24                 a = a + s[i];
    25             } else
    26                 a = "?";
    27         } else if (flag2 == 0  ) {
    28             if (s[i] >= '1' && s[i] <= '9') {
    29                 b += s[i];
    30                 flag2 = 1;
    31             } else {
    32                 b = "?";
    33                 break;
    34             }
    35         } else {
    36             if (! (s[i] >= '0' && s[i] <= '9') ) {
    37                 b = "?";
    38                 break;
    39             } else
    40                 b = b + s[i];
    41         }
    42     }
    43     if (a != "?" && b != "?") {
    44         int numa = 0, numb = 0;
    45         int la = a.size();
    46         int lb = b.size();
    47         for (int i = la - 1; i >= 0 ; i--) {
    48             numa += (a[i] - '0') * pow (10, la - i - 1);
    49         }
    50         for (int i = lb - 1; i >= 0 ; i--) {
    51             numb += (b[i] - '0') * pow (10, lb - i - 1);
    52         }
    53         int sum = numa + numb;
    54         if (numa > 1000)
    55             cout << "? + " << b << " = ?" << endl;
    56         else if (numb > 1000)
    57             cout << a << " + ? = ?" << endl;
    58         else
    59             cout << numa << " + " << numb << " = " << sum << endl;
    60 
    61     } else
    62         cout << a << " + " << b << " = ?" << endl;
    63     return 0;
    64 }
  • 相关阅读:
    【并发编程】多线程并发最佳实践
    【并发编程】死锁
    【并发编程】【JDK源码】J.U.C--线程池
    【并发编程】【JDK源码】J.U.C--组件FutureTask、ForkJoin、BlockingQueue
    【JVM】关于类加载器准备阶段的一道面试题目
    【并发编程】【JDK源码】J.U.C--AQS 及其同步组件(2/2)
    【并发编程】线程安全策略
    JSP 9大内置对象详解
    Jquery中的bind(),live(),delegate(),on()绑定事件方式
    阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/zhien-aa/p/8610598.html
Copyright © 2011-2022 走看看