1001. A+B Format (20)

Posted yuzhiboprogram

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1001. 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

Each input file contains one test case. Each case contains a pair of integers a and b where -1000000 <= a, b <= 1000000. The numbers are separated by a space.

 

Output

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

 第一次写的代码:

/*参考了别人的思路,sum=a+b 随意sum的范围在(-2000000,2000000)
abs(sum)<=999 只用输出1次
999<abs(sum)<=999,999 需要输出2次
其余的情况,需要输出3次
*/
#include<iostream>
#include <math.h>
#include <iomanip>//包含这些setw setfill ,同时只能生效一次
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
int sum=a+b,flag=0;
if(sum<0) flag=1;//负数的标记位,如果为负,那么falg=1
int ca;
if(abs(sum)<=999) ca=1;
if(999<abs(sum)&&abs(sum)<=999999) ca=2;
if(999999<abs(sum)) ca=3;
if(flag==1) printf("-");
switch (ca)
{
case 1:{
cout.fill(‘0‘);
cout.width(3);
cout<<abs(sum)<<endl;
}
break;
case 2:{
int t=abs(sum)/10,m,n=1;
while(t>999)
{
t=t/10;
n++;
}
m=abs(sum)-t*pow(10,(double)n);
cout.fill(‘0‘);
cout.width(3);
cout<<t<<","<<setw(3)<<setfill(‘0‘)<<m<<endl;
}
break;
case 3:
{
int t=abs(sum)/10,m,n=1;
while(t>999)
{
t=t/10;
n++;
}
m=abs(sum)-t*pow(10,(double)n);
cout<<"m的值为"<<m<<endl;
int o=0;
while(m>999)
{
m=m/10;
o++;
}
int k=abs(sum)-t*pow(10,(double)n)-m*pow(10,(double)o);
cout.fill(‘0‘);
cout.width(3);
cout<<t<<","<<m<<","<<setw(3)<<setfill(‘0‘)<<k<<endl;
}
break;
}
return 0;
}

 

因为上次是在公司里面写的,看了一天源码的我,脑子已经不好使了。眼睛也累,题目没理清思路,总结一下吧:第一个显示的3个数字,显示,计算出来是啥,就是啥,不用补零,之后的分组需要添加0.本来想用string和int的变化把这题解出来的,如果我以后有时间,一定会回来把他搞定的,看了别人的代码,思路明显更好,方便又节约时间。接下来,贴出正确的代码:

#include<iostream>
#include <math.h>
#include <iomanip>//包含这些setw setfill ,同时只能生效一次
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
int sum=a+b,flag=0;
if(sum<0) flag=1;//负数的标记位,如果为负,那么falg=1
int ca;
if(abs(sum)<=999) ca=1;
if(999<abs(sum)&&abs(sum)<=999999) ca=2;
if(999999<abs(sum)) ca=3;
if(flag==1) printf("-");
int co=abs(sum);
switch (ca)
{
case 1:{
cout<<abs(sum)<<endl;
}
break;
case 2:{
/*int t=abs(sum)/10,m,n=1;
while(t>999)
{
t=t/10;
n++;
}
m=abs(sum)-t*pow(10,(double)n);
printf("%d,%03d",t,m);
cout.fill(‘0‘);
cout.width(3);
cout<<t<<","<<setw(3)<<setfill(‘0‘)<<m<<endl;*/
printf("%3d,%03d",co/1000,co%1000);
}
break;
case 3:
{
printf("%3d,%03d,%03d",co/1000000,(co/1000)%1000,co%1000);
}
break;
}
return 0;
}

 

算是为了锻炼自己吧,有些明明不需要的,iomanip里面的额setw() setfill(),刻意加上去的。其实只需要在printf上做文章就好了。还有switch case也是强行加戏。看看就好。

以上是关于1001. A+B Format (20)的主要内容,如果未能解决你的问题,请参考以下文章

PAT1001. A+B Format (20)

PAT 甲级 1001 A+B Format (20)(20 分)

1001 A+B Format (20)

1001. A+B Format (20)

1001 A+B Format (20 分)

1001 A+B Format (20 分)