PAT甲级1001
题目概述
输入一对整数a,b(-106<=a,b<=106),a与b中间一个用空格隔开,对a+b的结果用逗号从右往左三位一隔。
Sample Input:
-1000000 9
Sample Output:
-999,991
分析
因为要考虑到对和中插入逗号,所以考虑用字符数组存储求和结果,可以单独标记和的正负,这里用flag作为正负号的标记。单独判断和大于-1000和小于1000的,直接输出和,因为不超过三位,所以不需要添加逗号,对超过此限制的和定义函数功能解决。
代码
#include<iostream>
using namespace std;
int f(int m){
char a[10];
int i,flag=1;
if(m<0) {
flag*=-1;
m*=flag;
}
// cout<<m<<endl;
for(i=0;m>0;i++){
if(i%4==3) a[i]=',';
else {
// cout<<m%10<<endl;
a[i]=m%10+48;
// cout<<a[i]<<endl;
m/=10;
}
}
if(flag==-1) cout<<"-";
for(--i;i>=0;i--){
cout<<a[i];
}
}
int main(){
int a,b;
while(cin>>a>>b){
if(a+b<1000&&a+b>-1000) cout<<a+b<<endl;
else {
f(a+b);
cout<<endl;
}
}
return 0;
}
结果
【注】其实PAT是单点测试,我是在做完这次题之后才知道的,所以做的时候考虑了多组数据的测试问题,就设置了循环输入a,b,但是最后提交是通过的。:)