PAT甲级 1001 A+B Format 总结

时隔两个月后,重新开始练习pat。这一次本来打算先刷一下算法笔记这本书上的习题,巩固一下基础。但是鉴于目前王道数据结构已经复习到了第六章,很多数据结构的难度算法题也算是自己用笔写过,应该不需要再从头开始写简单的题了。于是今天开始刷PAT甲级题库了。一边刷题一边翻书回顾知识点反而会更有效。今天刷的这道题是pat甲级的编号1001的题目,求的是一个a+b的运算结果。

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.

上述题目的大概意思就是输入两个数a,b(-1000000<a,b<1000000),题目要求用标准的格式输出(即999,999,999)每隔三个数便要输出一个逗号隔开。下面是程序分析和错误总结。

#include<stdio.h>
#include<math.h>

int main()
{
  int a, b;

 scanf("%d %d",&a,&b);
 if(a>=-1000000&&a<=1000000){
     if(b>=-1000000&&b<=1000000){
         int c=a+b;
        if(c<0){ 
            c=fabs(c);
            printf("-");//这里要特别注意,如果测试用例中的数字是负值,必须将c先取正,然后先输出一个负号,才能保证后面的if——else分支结构正常执行
        }
         if(c<=999){
              printf("%d\n",c);
         }
         else if(c>=1000&&c<=999999){
                printf("%d,%03d\n",c/1000,c%1000);
         }
              else{
                printf("%d,%03d,%03d",c/1000000,c%1000000/1000,c%1000);//if——else结构的嵌套结构,将c的位数分为三种不同情况来加以区分。其中%03d一定要特别注意!这里用%3d测试是无法通过的,因为%3d是用空格补充前面的位数,而%03d是用0补充。举个例子大家就明白了:9,012,3和9, 12,3。如果用%3d,这个五位数中间就会断掉。
     }
     }
 }
  return 0;
}

最后大家一定要记得return 0,正常退出程序。

好了,今天第一次做pat甲级的题目。我也读不太懂英文,不过自己想想,再看一下后面的测试用例,基本就能明白。最重要的是,大家一定要态度认真,动脑子。这个东西不动脑子是写不出来的。还有就是要注意多种可能性,注意边界条件,比如这个程序中的c如果为负数,必须要先取正。当然或许你可以用其他方法。另外问一句,各位都是准备用PAT抵浙大复试上机成绩的吗?

另附程序测试截图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值