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
一、试题分析:
- 题目是考察的:输出时格式控制
- 整型数据范围:−10^6 ≤ a,b ≤ 10^6(可以根据题目设置一个最大六位的数组)
- 每三个数输出一个逗号
二、解题思路:
- 数据范围不大,使用int即可
- 将计算结果转化为字符串string类型,使用to_string()
- 根据一系列测试数据,找出输出逗号所在的下标值,到了则输出str[i]
逗号输出时的下标值 测试数据 总长度 下标 (i - (length - 1) % 3)==0(从第一个逗号开始,每三位输出一个逗号)
i != length(数据位数是3的整数倍,最后一个逗号不需要输出)
12 2 \ length<3 123 3 \ length<3 1231 4 str[0] (4-1)%3 = 0 12312 5 str[1] (5-1)%3 = 1 123123 6 str[2] (6-1)%3 = 2 1000000 7 str[0] str[3] (7-1)%3 = 0、(7-1)%3+3 = 3、最后一个逗号不需要输出
三、知识点:
- 数据类型范围
类型名称 | 字节数(16、32、64位OS) | 取值范围 |
short | 2 | [-2^15, 2^15-1] |
int | 2、4、4 | [-2^31, 2^31-1] |
long | 4、4、8 | [-2^31, 2^31-1] |
float | 4 | 小数点后7位 |
double | 8 | 小数点后16位 |
char | 1 |
|
- 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),从而找到其中的规律。