写这个只是想记录一下本人在刷PAT过程中遇到的一些问题和自己的总结。
现本人情况为:学习了C语言和数据结构,JAVA语言,C++只是一知半解,并没有全部掌握,所以在刷题的过程中,同时记录C++的学习。
1001 A+B Format
1.首先这题难点是对于逗号的输出,每三位数就要输出一个逗号,如果使用数字的形式输出,就会考虑到零的问题,比如加法之后结果为100002,实际输出显示应该是“100,002”,但是用数字形式的话,取最后三位的时候,不论如何只会取得2,前面的0会自动省略,显示结果就会如下显示“100,2”,所以最后输出不能使用数字形式,必须将结果转换为字符串的形式进行处理。
2.C++数字转换为字符串方法
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main(){
double a = 123.32;
string res;
stringstream ss;
ss << a;
ss >> res;//或者 res = ss.str();
cout<<res;
return 0;
}
3.考虑加法的范围是否合理,题目要求−106≤a,b≤106,然后C++中int的范围是-2147483648 到 2147483647,可以表示10^9的范围,所以这道题的考虑就简单了,进行整型加法即可。这一点的通过后查询别的方法时,通过别人的分析认识到的。
4.学习他人的方法,认识到其实对于逗号的处理,其实可以将数字先倒置放入数字数组,然后对于下标进行处理,下标可被3整除的前或者后可以添加逗号,具体看情况。
5.本人写的代码
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
void print(int s){
int n=0,m=s,p=0,i=0;
string str="";
stringstream ss;
while(abs(m/1000)>0){
m = m/1000;
n++;
}
m=s;
if(n>0){
ss << m;
ss >> str; //转换为字符串,通过n判断需要加入,的次数
while(n){
i=3*n;
str.insert(str.length()-i,",");
n--;
}
cout<<str;
}
else{
printf("%d",s);
}
}
int main(){
int a,b,sum;
scanf("%d %d",&a,&b);
sum = a + b;
print(sum);
return 0;
}