zoukankan      html  css  js  c++  java
  • 7-184 正整数A+B (15 分)

    7-184 正整数A+B (15 分)

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

    输入格式:

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

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

    输出格式:

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

    输入样例1:

    123 456
    

    输出样例1:

    123 + 456 = 579
    

    输入样例2:

    22. 18
    

    输出样例2:

    ? + 18 = ?
    

    输入样例3:

    -100 blabla bla...33
    

    输出样例3:

    ? + ? = ?
    #include <stdio.h>
    #include <string.h>
    #define MAX 100
    
    int judge(const char *);
    int main (){
        char str[MAX],a[MAX],b[MAX];
        scanf("%s ",a);
        gets(b);
        int ai , bi ;
        ai =  judge(a);
        bi = judge(b);
        if ( ai == -1 && bi == -1)
            printf("? + ? = ?");
        else if (ai == -1 )
            printf("? + %d = ?",bi);
        else if (bi == -1)
            printf("%d + ? = ?",ai);
        else
            printf("%d + %d = %d",ai,bi,ai+bi);
    
        return 0  ;
    }
    int judge( const char  *t){//判断并取值
        int i,ret,len;
        ret = 0;
        len = strlen(t);
        if (len <1 || len >4)
            ret = -1;
        else {
            for ( i=0 ; i<len ; i++){
                if ( t[i] >= '0' && t[i] <= '9')
                    ret = ret * 10 + t[i] - '0';
                else {
                    ret = -1;
                    break;
                }
            }
        }
        if ( ret < 1 || ret > 1000)
            ret = -1;
        return ret ;
    }
  • 相关阅读:
    测试小技巧之常用工具
    测试小技巧之浏览器插件
    可变参数列表
    对象属性和数组元素的初始默认值
    静态块(变量)和非静态块(变量)
    类初始化顺序
    基本类型的重载规则
    构造器访问权限控制
    MySQL Server架构图
    递归与非递归实现树的遍历(java)
  • 原文地址:https://www.cnblogs.com/xiaolitongxueyaoshangjin/p/13418379.html
Copyright © 2011-2022 走看看