【PAT甲级】 1001 A+B Format
原题
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 1:
-1000000 9
Sample Output 1:
-999,991
思路
题目要求
每三个数字要用,分割,
除非小于四位数。
题目分析
- 关键在于输出的标准格式;
- 输出为一行;
- 在考虑每三个输出
,
的时候要记得考虑0;
参考代码如下
include <iostream>
using namespace std;
typedef long long ll;
void format(int c, int num){
if(c/10 != 0) format(c/10,num+1);
printf("%d",c%10);
if(num%3==0&&num!=0){//要考虑为0得情况,不然最后也会输出
printf(",");
}
}
int main(){
ll a,b;
scanf("%lld %lld",&a,&b);
ll c = a+b;
if(c<0){
printf("-");
c = -c;
}
int num = 0;
format(c, num);
}
可能会出现的问题
- 这段英文警告意思是,
scanf
的返回值正在被忽略,在warn_unused_result
中有说明; - 即你的程序忽略了
scanf
的值,这可能会产生一些问题,所以GCC编译器给了你一个警告; - 该
warning
并不影响程序执行,而出现测试用例未通过的原因是程序本身存在其他错误,诸如逻辑问题,请仔细检查程序; - 该
warning
一般在本地编译器内不会出现。
附
- 网上的参考代码很多,比如转string之类的;
- 以上仅是用来记录我个人的想法和答题方式;
- 仅为c++入门选手,如有错误或者更好的方法欢迎指正与探讨;