PAT 1001(字符串处理)

1001 A+B Format (20分)


Calculate a+b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).

Input Specification:

Each input file contains one test case. Each case contains a pair of integers a and b where −10​^6​​≤a,b≤10^​6​​. The numbers are separated by a space.

Output Specification:

For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.

Sample Input:

-1000000 9

Sample Output:

-999,991

一、试题分析:

  1. 题目是考察的:输出时格式控制
  2. 整型数据范围:−10​^6​​ ≤ a,b ≤ 10^​6​​(可以根据题目设置一个最大六位的数组)
  3. 每三个数输出一个逗号

二、解题思路:

  1. 数据范围不大,使用int即可
  2. 将计算结果转化为字符串string类型,使用to_string()
  3. 根据一系列测试数据,找出输出逗号所在的下标值,到了则输出str[i]
逗号输出时的下标值
测试数据总长度下标 

(i - (length - 1) % 3)==0(从第一个逗号开始,每三位输出一个逗号)

i != length(数据位数是3的整数倍,最后一个逗号不需要输出)

12\length<3
1233\length<3
12314str[0](4-1)%3 = 0
123125str[1](5-1)%3 = 1
1231236str[2] (6-1)%3 = 2
10000007str[0] str[3](7-1)%3 = 0、(7-1)%3+3 = 3、最后一个逗号不需要输出

 

三、知识点:

  • 数据类型范围
C++各数据类型——位数及范围
类型名称字节数(16、32、64位OS)取值范围
short2[-2^15, 2^15-1]
int2、4、4[-2^31, 2^31-1]
long4、4、8[-2^31, 2^31-1]
float4小数点后7位
double8小数点后16位
char1

 

  • int类型数据转化为string类型数据

to_string():

配置c++11 https://jingyan.baidu.com/article/9158e0002da799a254122893.html

如果还是报错则可能是MinGW本身的问题https://blog.csdn.net/icurious/article/details/78424068?tdsourcetag=s_pctim_aiomsg

  • 为了避免超时,封装的函数多次调用往往会耗时很多
#include <iostream>
using namespace std;

int main()
{
    int length,num1,num2,sum;
    string str;

    cin >> num1 >> num2;
    sum = num1 + num2;
    if (sum < 0){
        cout << "-";
        sum = -sum;
    }

    str = to_string(sum); //int类型转化为string类型 之后使用下标str[i]即可
    length = str.length(); //不要之后重复调用.length()函数
    for(int i = 0;i < length; i++){
        cout<<str[i];
        if((i-(length-1)%3)%3==0&& i!= length-1){
            cout<<',';
        }
    }
    return 0;
}

四、经验总结

  • 一开始自己的思路是将逗号拼接到到str中,构成一个新的strnew。主要涉及子串的使用substr(i,length) ; 

        这种方法比直接输出逗号要麻烦且费时很多。所以直接输出更简单,就直接输出。

  • 本题重点在于找到逗号输出的对应下标值:列出多组数据、利用已有信息length、每三个输出(%3),从而找到其中的规律。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值