PAT1001 A+B Format练习心得

写这个只是想记录一下本人在刷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.考虑加法的范围是否合理,题目要求−10​6​​≤a,b≤10​6​​,然后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;
} 

猜你喜欢

转载自blog.csdn.net/weixin_44696740/article/details/104030611
今日推荐