设为首页 加入收藏

TOP

菜鸟记录:c语言实现PAT甲级1001--Format(20)(一)
2023-07-23 13:29:03 】 浏览:54
Tags:PAT 甲级 1001--Format

前几天刚开始对PAT甲级的刷题,首次看到英语的题目,让原本就菜的我更是头秃,但第一题叫了n遍以后满分通过的时候还是蛮爽的,在此仅记录一下该题的个人解题心路,菜鸟记录,技术极低。

 

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 ?106a,b106. 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

 题目分析:

    加法计算,但是输出格式需分成三个一组,输入和输出的数据范围控制在10e-6~10e6。

个人想法: 

    首先,加法的计算和数据的范围无需多说,即重点在于输出的分组,开始我以为作为第一题,会是一个近乎没有结构或算法的题目,于是在开始之前以为会是有关键字或某个库中的函数,迟迟不敢下笔而是苦思冥想有没有学过,脑海搜索失败后开始编写这道题。

    由于10e6三个一组并没有太多组,所以仅在该题中可以用if语句写,虽然很笨,但有用。

第一次提交:

 1 #include<stdio.h>
 2 
 3 int main ()
 4 {
 5     int a, b;
 6         int sum;
 7         int s; //记录sum值千位以上的数值,方便输出
 8         scanf("%d%d", &a, &b);
 9         sum = a + b;
10         s = sum / 1000;
11         while (sum / 1000 != 0)
12         {
13             s = sum / 1000;
14             if (s >= 1000)
15             {
16                 a=s/ 1000;
17                 printf("%d,", a);
18                 s %= 1000;
19             }
20             if (s / 100 != 0) {
21                 printf("%d\n", s);
22             }
23             else if (s / 10 != 0) {
24                 printf("0%d\n", s);
25             }
26             else
27             {
28                 printf("00%d,", s);
29 
30             }
31             sum = sum % 1000;
32         }
33         if (sum / 100 != 0) {
34             printf("%d\n", sum);
35         }
36         else if(sum/10!=0) {
37             printf("0%d\n", sum);
38         }
39         else
40         {
41             printf("00%d\n", sum);
42 
43         }
44         return 0;
45 }

  提交结果:  

  

 

20分只有2分的屑。。。经过多次测试,发现问题很多,例如:当sum值不超过100时,答案会是025或005这样的格式,0并没有消除,与预期所想不符,大刀阔斧改一下。

 

第二次提交:

#include<stdio.h>
int main()
{

        int a, b;
        int sum;
        int s;
        scanf("%d%d", &a, &b);
        sum = a + b;
        s = sum / 1000;
        while (sum / 1000 != 0||s>0)
        {
            if (s / 1000 !=0)
            {
                a=s/ 1000;
                printf("%d,", a);
                s %= 1000;
            }
            if (s / 100 != 0) {
                printf("%d,", s);
                s = 0;
            }
            else if (s / 10 != 0) {
                printf("%02d,", s);
                s = 0;
            }
            else
            {
                printf("%03d,", s);
                s = 0;
            }
            sum = sum % 1000;
        }
        if (sum / 100 != 0) {
            printf("%d\n", abs(sum));
        }
        else if(sum/10!=0) {
            printf("%02d\n", abs(sum));
        }
        else
        {
            printf("%03d\n", abs(sum));

        }
        return 0;

}
View Code

提交结果:

 

 

 

第二次测试对s进行了改进,在while的判定条件里加入了||s>0,并在几个if语句中对s进行清零,意图通过对高位的判别进行改进,然而还是会有小错误,其中还要特殊情况,sum=0时出现的000。于是在第三次进行改进时,干脆将几个,分开的组用不同变量进行记录。

<--------------------------------------------------------------------------------------------------------------------------------------------------------------->

第三次提交:

 

 1 //10e6===1,000,000
 2 
 3 #include<stdio.h>
 4 #include<math.h>
 5 
 6 int main()
 7 {
 8         int a,b;
 9     int sum;
10     scanf("%d%d",&a,&b);
11     sum=a+b;
12 
13     int t=0,s,x;
14     if(sum<0) t=1;
15     sum=abs(sum);
16     s=sum/1000;
17     x=s/1000;
18     sum%=1000;
19     if(t)
20     {
21         if(x)
22         {
23             s%=1000;
24             printf("-%d,%03d,%03d\n",x,s,sum);
25         }
26         else if(s)
27             printf("-%d,%03d\n",s,sum);
28         else if(sum)
29             printf("-%d\n",sum);
30     }
31     else
32     {
33         if(x)
34         {
35             s%=1000;
36             printf("%d,%03d,%03d\n",x,s,sum);
37         }
38         else if(
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Windows OpenGL ES 图像饱和度调节 下一篇王道23年代码练习(1)顺序表插入..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目