1001 A+B Format(字符串处理)

这类题目几乎不需要数据结构,算法基础,主要通过简单的逻辑流程和判断实现。

题目描述
大致题意:
给出两个整数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
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值