大致题意: 给出两个整数a和b,a和b的取值范围为[-1000000,1000000],然后计算a和b的和,并且输出a和b的和,但是输出的时候不能直接输出,而需要转换成标准格式,所谓标准格式,即每三位数字之后加一个“,”,数字最后不用加“,”。 基本思路: 定义两个整形变量a和b,因为int型的取值范围大致为±2^32,要大于所给所给的取值范围。直接进行加法计算,得到结果。但这时所得的结果的格式不满足要求,要想满足要求,需要将所得的整数转换成字符串,然后对字符串进行操作,即在所得字符串的相应位置加入“,”即可。 一些细节: 首先将所得整数结果转换成字符数组。 刚开始所用的方法是_itoa_s(int,char[],进制);该方法共有三个参数,第一个参数是想要转换的整形数字,第二个参数是,接收转换结果的字符数组,第三个参数是以哪种进制进行转换。但是这个函数在官方编译器中不能通过编译。 后来选用snprintf(char[],sizeof(char),"%d",int)函数;该函数共有四个参数,第一个为接收结果的字符数组,第二个为数组的长度,"%d"指定整数类型,x为需要进行转换的整数。 除了使用snprintf()的方法,还可以使用C++的类型转换 string str=to_string(int);直接将整数类型转换成字符串;将字符串转化为整数可以用:atoi(str.c_str()) 得到字符型数组后,将字符数组转换为string类型,直接 string str=ch;就可以。使用string类型的丰富多样的方法和操作很容易对字符串进行操作。
最后的提交结果,有一些测试点答案不正确,20分的题,只拿到了14分,冥思苦想,也没能想到遗漏了哪些测试点。
提交的代码如下:
#include<iostream> #include<string> using namespace std; int main() { int a,b; cin>>a>>b; int sum; sum=a+b; char ch[10]; snprintf(ch, sizeof(ch), "%d", sum); string str=ch; string temp=","; if(sum<0) //首先判断结果是否为负数 { if(str.size()<=4) //如果是负数,并且字符串的长度小于等于4, //这时候不需要处理,直接输出就好 cout<<str<<endl; else if(str.size()>4&&str.size()<=7) //需要加入一个逗号的情况 { str.insert(str.begin()+4,temp.begin(),temp.end()); cout<<str<<endl; } else{ //需要插入两个逗号的情况 str.insert(str.begin()+4,temp.begin(),temp.end()); str.insert(str.begin()+8,temp.begin(),temp.end()); cout<<str<<endl; } } else { if(str.size()<=3) cout<<str<<endl; else if(str.size()>3&&str.size()<=6) { str.insert(str.begin()+3,temp.begin(),temp.end()); cout<<str<<endl; } else{ str.insert(str.begin()+3,temp.begin(),temp.end()); str.insert(str.begin()+7,temp.begin(),temp.end()); cout<<str<<endl; } } return 0; }出错原因: 读题不认真,题意理解出错,应该从右边开始,每三位加入一个逗号; 修改过后,结果正确。(采用了暴力的方法,此处代码极不优美,没有参考意义,就不贴上了) 此时在浙大PAT的排名为40737
