PAT甲级1001
题目简介
将两个输入的数的总和以标准格式输出
解题思想
我的思想:将其每三位存入栈,用整除1000以后存储,但是有两个坑
1、负号不作为一个占位符在三位中的一位(PS:我其实没有发现,因为测试点出问题和同学商量的时候他告诉我的)
2、循环结束条件一定要是小于1000或者大于-1000千万不可以有等与(就是这个原因导致我测试点11一直没有过去!!!)
接下来附上我的代码(PS:看了人家的代码我的代码不知道为啥这么冗长)
#include<iostream>
using namespace std;
int main(){
int a,b,sum,top;
int number[3];
while(cin >> a >> b){
top=2;
sum=a+b;
if(sum>=-1000&&sum<=1000){
cout << sum;
}
else{
while(sum>=1000||sum<=-1000){
if(sum%1000<0){
number[top]=-sum%1000;
}
else{
number[top]=sum%1000;
}
sum=sum/1000;
top--;
}
number[top]=sum;
cout << number[top] << ",";
top++;
for(top;top<2;top++){
if(number[top]<10){
cout << "00";
}
else if(number[top]<100){
cout << "0";
}
cout << number[top] << ",";
}
if(number[top]<10){
cout << "00";
}
else if(number[top]<100){
cout << "0";
}
cout << number[top];
}
}
return 0;
}
别人的思想:因为a和b的范围是10^6次所以位子再多也不会超过9位,所以判断sum的大小即可,然后分别直接输出,整除1000和对1000求模输出以及整除1000000和对1000求模以后整除1000和再对1000求模(PS:有点绕,直接上代码比较实在)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
int c=a+b;
if(c<0){cout<<'-';c=-c;}
if(c>=1000000){
printf("%d,%03d,%03d",c/1000000,c%1000000/1000,c%1000);
}else if(c>=1000){
printf("%d,%03d",c/1000,c%1000);
}else{
printf("%d",c);
}
return 0;
}