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 −10^6
≤a,b≤10^6. 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
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b;
c=a+b;
int t;
t=c/1000;
string s,s1;
if(abs(c%1000)>=100){
s=",";
}
else if(abs(c%1000)>=10){
s=",0";
}
else{
s=",00";
}
if(abs(t%1000)>=100){
s1=",";
}
else if(abs(t%1000)>=10){
s1=",0";
}
else{
s1=",00";
}
if(c==0){
cout<<c;
}
else if(t==0){
cout<<c;
}
else if(t/1000==0){
cout<<t<<s<<abs(c%1000);
}
else{
cout<<t/1000<<s1<<abs(t%1000)<<s1<<abs(c%1000000)%1000;
}
}
以上是我写的代码,因为不知道用简便的方法在C++中把int型转换成string型,所以用了这种办法,但写到后面发现这种办法巨麻烦,而且调整了之后还有一个测试点没有通过。
不明白是什么原因,明天再找找相关办法。
试试int转化为string或者换种语言来写。
2/16更新
暂时不知道自己漏了哪一个点,所以换了一种办法来解
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int a,b,n,ans;
cin>>a>>b;
n=a+b;
ans=0;
char str[10];//弄个数组存下输出的数
int k=0;
if(n==0){ //后来发现漏了一个0的情况
cout<<n;
}
else{
while(abs(n)>0){
ans++; //用ans记录现在正在存的位数
if(abs(n)/10==0){
cout<<n; //到首位时可以直接输出
break;
}
str[k]=abs(n%10)+48; //才发现-991%10=-1
k++;
if(ans%3==0){
str[k]=',';
k++;
}
n/=10;
}
for(int i=k-1;i>=0;i--){
cout<<str[i];
}
}
}