时隔两个月后,重新开始练习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 −106≤a,b≤106. 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抵浙大复试上机成绩的吗?
另附程序测试截图。