PAT甲级1001 专给小白的讲解(C++)
说明题意:
实现a+b,将结果类似于手机计算器上的标准化输出——从最后三位开始,每三位用“,”进行分隔!重点这里a,b范围是-1000000~1000000
输入格式:a空格b
输出格式:结果(已经标准化后)
思路分析:
1.此题目没有超出整数范围,因此,我们不必去转化为字符串。
2.通过数求和后数字的位数,将整个数字3位3位对1000取余成为 xx,xxx,xxx的形式(这里的前3位数字要特殊考虑)。注意:不足3位的,用0补齐。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int a,b,c,i,flag=0;
cin>>a>>b;
a=a+b;//直接修改a的值,减少变量的使用
if(a<0){
a=-a;
flag=1;//标记变量,若为负数,则先转为整数,最后输出负号
}
c=10;
//cout<<a<<endl;//用来测试输出的
while(a!=0){
if(a/c!=0){
c*=10;
}
else
break;
}
c/=10;//while循环目的是数数字个数,如12345则求出c的值为10000
int count = 0;
//cout<<c<<endl;
while(c>=1000){
c=c/1000;
count++;
} //数一数有多少个三位数,用count来记录,方便后期做循环。
//cout<<c<<endl;
//cout<<count<<endl;
int t=a;
for( i=0;i<count;i++){ //求出数字前1或2位,如果是3位的话此时count++
t/=1000;
}
if(count==0){
if(flag==0)
cout<<t;
else
cout<<"-"<<t;
}
else{
if(flag==0)
cout<<t<<",";
else
cout<<"-"<<t<<",";
} //对前几位的输出(小于3位)
c=1;
for( i=0;i<count;i++){
c*=1000;
}
a%=c;//把后边的3的倍数位取出,方便进行运算。
for( i=0;i<count;i++){
if(i==count-1){
cout<<setw(3)<<setfill('0')<<a%1000;
}
else{
cout<<setw(3)<<setfill('0')<<a/1000<<",";
a%=1000;
}
}
return 0;
}
总结:
至此我的第一篇博客算是写完了,欢迎批评指教,各位大神不喜勿喷,毕竟大家都从零开始过!有更好的代码可以发在评论区噢!笔芯❤!