A1001 A+B Format (20分)
一、题目描述
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的合,并用逗号隔开连续的三位数字。
三、思路
1. 思路①
①:计算a+b的总和,若为负数,则先输出‘-’,并把sum取绝对值。
②:把sum的每一位数字一一存入栈中(从个位进栈),每进3位数字再额外压入一个逗号。
③:最后一一输出栈顶即可。
2. 思路②
①:由于数据的范围是给定的,不会超过107。所以我们一一枚举即可
if(sum >= 1000000) printf("%d,%03d,%03d",sum / 1000000,sum % 1000000 / 1000 , sum % 1000);
else if(sum >= 1000) printf("%d,%03d",sum / 1000 , sum % 1000);
else printf("%d",sum);
四、AC代码
1. 代码①
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
stack<char>s;
int main()
{
ll a,b;
cin >> a >> b;
ll sum = a + b;
if(sum < 0) cout << "-";
sum = abs(sum);
int t = 0;
do{
t ++;
s.push(char('0'+(sum % 10)));
sum /= 10;
if( t % 3 == 0 && sum != 0) s.push(',');
}while(sum);
while(!s.empty()){
cout << s.top();
s.pop();
}
return 0;
}
2. 代码②
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a,b;
cin >> a >> b;
ll sum = a + b;
if(sum < 0) cout << "-";
sum = abs(sum);
if(sum >= 1000000) printf("%lld,%03lld,%03lld",sum / 1000000,sum % 1000000 / 1000 , sum % 1000);
else if(sum >= 1000) printf("%lld,%03lld",sum / 1000 , sum % 1000);
else printf("%lld",sum);
return 0;
}