PAT L1-025. 正整数A+B

PAT L1-025. 正整数A+B


题目链接

/*
(1)B有可能包含空格
(2)A, B可能是超出范围[1, 1000]的数
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

int  // 检查a[]是否全是数字
isInt(char a[1005]) {
    int i, len = strlen(a);

    for( i = 0; i < len; i++ ) {
        if( !(a[i] >= '0' && a[i] <= '9') ) {
            return 0;
        }
    }
    return 1;
}

int  // 判断a是否在区间[1, 1000]
f(char a[1005]) {
    int i, len = strlen(a), ans = 0;

    // 可看成是一个低效的atoi()函数
    for( i = len - 1; i >= 0; i-- ) {
        ans += (a[i] - '0') * pow(10, len - i - 1);
    }
    if( !(ans >= 1 && ans <= 1000) ) {
        return 0;
    }
    return 1;
}

int
main() {
    char a[1005], b[1005];

    scanf("%s", a);
    getchar();
    gets(b); // b有可能包含空格
    if( isInt(a) == 1 && isInt(b) == 1 && f(a) == 1 && f(b) == 1 ) {
        printf("%s + %s = %d\n", a, b, atoi(a) + atoi(b));
    }
    else if( (isInt(a) == 0 || f(a) == 0) && (isInt(b) == 0 || f(b) == 0) ) {
        printf("? + ? = ?\n");
    }
    else if( isInt(a) == 1 && f(a) == 1 ) {
        printf("%s + ? = ?\n", a);
    }
    else if( isInt(b) == 1 && f(b) == 1 ) {
        printf("? + %s = ?\n", b);
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值