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