您的位置:首页 > 其它

【PAT】1001. A+B Format

2014-03-13 20:13 106 查看
http://pat.zju.edu.cn/contests/pat-a-practise/1001

此题花费了很长时间,做了几次都是说超时,网上找了个答案找到毛病,while(true)是绝对不能用的,while(cin>>a>>b)可以用。

#include <cstdlib>
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[])
{
int a,b,sum,n,i;

n=1,i=1;
cin>>a>>b;
sum=a+b;
//cout<<sum<<endl;
bool isneg=false;
if(sum<0)
{
isneg=true;
sum=0-sum;//不用abs()函数了
}
string str;

while(sum)
{
char ch='0'+sum%10;
sum/=10;
if(i%4==0)
{
str.push_back(',');
i=1;
}
str.push_back(ch);
i++;
}
reverse(str.begin(),str.end());
if(isneg)
{
cout<<'-';
}
cout<<str<<endl;

system("PAUSE");
return EXIT_SUCCESS;
}


搞定之后还是有个测试点通不过,于是又找了个答案:

#include<iostream>
#include<cmath>
using namespace std;
int main(){
long a,b,c;
int i,flag;
bool is_positive;
char result[9];

while(cin>>a>>b)
{
c = a+b;
if( c>0 )
is_positive = true;
else
is_positive = false;

flag = 0;
if(abs(c) >= 1000){
c = abs(c);  //取绝对值
for( i=0; c>0; i++){
result[i] = c%10 + '0';  //数字转换成字符
c = c/10;
if(flag == 2 && c != 0 )
{
i++;
result[i] = ',';   //每三个加一个逗号
flag = 0;
}
else
flag++;
}
if( !is_positive )  //结果为负数时
{
result[i] = '-';
cout<<result[i];
}

i--;  //i指向第一个数字
for(; i>=0; i--){
cout<<result[i];
}
cout<<endl;
}
else
{
cout<<c<<endl;
}
}
return 0;
}


还有个更加简单的做法:

#include<stdio.h>
int main()
{
int a,b;
int sum;
while(scanf("%d%d\n",&a,&b) != EOF){
sum = a+b;
if(sum < 0){
printf("-");
sum = -sum;
}
if(sum>=1000000){
printf("%d,%03d,%03d\n",sum/1000000, (sum/1000)%1000, sum%1000);
}
else if(sum >= 1000){
printf("%d,%03d\n",sum/1000,sum%1000);
} else{
printf("%d\n", sum);
}
}
return 0;
}
个人感觉有点取巧,但是解决的思路也很不错、精巧吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: