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 }
  • 相关阅读:
    How to build Linux system from kernel to UI layer
    Writing USB driver for Android
    Xposed Framework for Android 8.x Oreo is released (in beta)
    Linux Smartphone Operating Systems You Can Install Today
    Librem 5 Leads New Wave of Open Source Mobile Linux Contenders
    GUADEC: porting GNOME to Android
    Librem 5 – A Security and Privacy Focused Phone
    GNOME and KDE Join Librem 5 Linux Smartphone Party
    Purism计划推出安全开源的Linux Librem 5智能手机
    国产系统之殇:你知道的这些系统都是国外的
  • 原文地址:https://www.cnblogs.com/zhien-aa/p/8610598.html
Copyright © 2011-2022 走看看