1001 A+B Format 不用字符串处理的解法

目录

题目

题目翻译

解题思路

提交成功截图

附源代码


题目

题目链接:1001 A+B Format (PAT (Advanced Level) Practice)

1001 A+B Format 不用字符串处理的解法_第1张图片

题目翻译

A + B格式(20分)

计算a+b,并输出标准格式的和,即数字必须用逗号分隔为3组(除非小于4位)。

输入规格:

每个输入文件包含一个测试用例。每种情况都包含一对整数a和b,其中- 10^6≤a, b≤10^6.这些数字用一个空格隔开。

输出规范:

对于每个测试用例,您应该在一行中输出a和b的和。和必须按照标准格式填写。

样例输入:

-1000000 9 结尾无空行

样例输出:

-999,991结尾无空行

解题思路

假设加数为a b, 和为c。

1.若c为负,先将负号处理,c变为正数。

2.循环截取c最后3位数,存到数组save中。

3.逆序输出save数组中的数,注意若是不够3位要补0(第1个输出的除外)。

提交成功截图

1001 A+B Format 不用字符串处理的解法_第2张图片

附源代码

#include "stdio.h"

//example:99,999 
void output_format(int a, int b)
{
    int save[20];//保存每次取模后的数
    int c = a + b, i = 0, j;
    if(c<0)//先处理负号
    {
        printf("-");//有负号则输出
        c = -c;//转正数,方便处理
    }
    else if(c == 0)//0就直接输出
    {
        printf("0");
        return;
    }
    
    //逆序处理
    while(c>0)//每次都是将c的最后3位存到save数组里面
    {
        save[i++] = c % 1000;
        c /= 1000;
    }
    
    //输出结果
    for(j = i - 1; j >= 0; j--)//注意逆序输出
    {
        int temp = save[j];
        
        if(j == i-1)//第一个不用补0 不然会出现099,999的情况
            printf("%d",temp);
        else if(temp>=100)//不补0
            printf("%d", temp);
        else if(temp >= 10)//补1个0
            printf("0%d", temp);
        else//补2个0
            printf("00%d", temp);
        if(j)//除最后一个save[0]外,均输出","
            printf(",");
    }
}

int main()
{
    int a,b;
    scanf("%d %d", &a, &b);
    output_format(a,b);
}

你可能感兴趣的:(PAT,(Advanced,Level),Practice,算法,数据结构,c语言)