P8615 [蓝桥杯 2014 国 C] 拼接平方数--substr、to_string、stoi
- 题目
- 解析
- 介绍一下这三个函数:
- 1、to_string():
- 2、stoi():
- 3、substr():
- 代码
题目
解析
首先先将数据范围内的平方数标记,【因为题目中说道“首先它是个平方数”】
然后,巧妙的来了,睁大眼睛瞧好了!运用to_string()
将整数i转换为字符,这就有人要问了,为什么要转换呢?不转换行不行呀?当然可以,但是我这个肯定更巧妙,你学不学嘛!
转换为string类型为了好拆数据【用substr
】,自带的函数用着不香吗,拆完再转回int【用stoi
】接着判断平方就好了,如果都被标记了,那就输出结束循环。
介绍一下这三个函数:
1、to_string():
顾名思义,作用是方便将数字以文本形式处理,例如拼接
、分割
或输出
。
2、stoi():
【这个与to_string相反】全称是 string to integer(字符串转整数)
注意:
1)字符串必须表示有效数字
,(例如:“12a3”,stoi 会抛出异常)
2)前导零问题
:有前导零(比如 “009”),stoi 会直接转换成 9(忽略前导零)。
3、substr():
作用是从一个字符串中截取一部分字符,生成一个新的子字符串。
常用的2种方式:
1)substr(起始位置):截取从起始位置开始到字符串末尾的所有字符。即[i,-1]
2)substr(起始位置, 截取长度):从 起始位置 开始,截取指定长度的字符。即[i,j)左闭右开的
代码
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <math.h>
#include <queue>#include <cctype>
using namespace std;
int a, b;
int f[1000010];
int main() {cin >> a >> b;for (int i = 1; i <= 1000; i++)f[i * i] = 1;for (int i = a; i <= b; i++) {if (f[i]) {string s = to_string(i);for (int j = 1; j < s.size(); j++) {string s1 = s.substr(0, j);string s2 = s.substr(j);if (f[stoi(s1)] && f[stoi(s2)]) {cout << i << endl;break;}}}}return 0;
}