PAT Advance Level 1001 A+B Format (20 分)

今天尝试做一题甲级题,难度感觉一般,和乙级题相比,甲级题目描述全英文,不过词汇难度不大,几乎没有生词。可能是第一题的缘故,难度比较低,只是要考虑清楚具体的情况实现即可。

题目描述:

Calculate a+b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).

Input Specification:

Each input file contains one test case. Each case contains a pair of integers a and b where −10​6​​≤a,b≤10​6​​. The numbers are separated by a space.

Output Specification:

For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.

Sample Input:

-1000000 9

Sample Output:

-999,991

分析:

题目大意就是要求规范化输出A+B的结果,数字范围要求是-10^6到10^6。

先求出加和的结果有多少位数字,再定义一个数组,每隔三位存储进来(直接对1000取余即可),由于是倒序输入,则输出时从数组的最后一个元素开始输出。这时要注意,输出的第一个数按本来的正负号输出,后面的要按绝对值输出。

代码:

#include<stdio.h>
int add(int a,int b);               //加和函数
int abs(int a);                     //绝对值函数
int add(int a ,int b){
    return a+b;
}
int abs(int a){
    if(a>=0){
        return a;
    }else{
    return -a;}
}
int main()
{
    int c,b;
    scanf("%d %d",&c,&b);
    int num=add(c,b);
    int i=0;
    while(num!=0){
        num/=10;
        i++;
    }
    int j=i/3;
    int a[++j];
    int temp;
    int temp1=j-1;
    num=add(c,b);

    for(temp=0;temp<j;temp++){
        a[temp]=(num%1000);
        num/=1000;
    }
    temp1=i/3;
    if((i/3)==0){
        printf("%d",add(c,b));
    }else if((i/3==1)&&(i%3==0)){printf("%d",add(c,b));}
    else if((i/3==2)&&(i%3==0)){
        temp1--;
        printf("%d,",a[temp1]);

        printf("%03d",abs(a[0]));
    }
    else{
        printf("%d,",a[temp1]);
        temp1--;
        for(temp1;temp1>0;temp1--){
            printf("%03d,",abs(a[temp1]));
        }
        printf("%03d",abs(a[0]));
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值