[蓝桥杯 2014 国 C] 拼接平方数
拼接平方数
小明发现 49 很有趣,首先,它是个平方数。它可以拆分为 4 和 9,拆分出来的部分也是平方数。169 也有这个性质,我们权且称它们为:拼接平方数。
100 可拆分 1,00,这有点勉强,我们规定,0,00,000 等都不算平方数。
小明想:还有哪些数字是这样的呢?
你的任务出现了:找到某个区间的所有拼接平方数。
输入格式
两个正整数 a,b(a<b<10 6)。
输出格式
若干行,每行一个正整数。表示所有的区间 [a,b] 中的拼接平方数,从小到大输出。
思路:把数字转换成字符串,然后在不同地方(循环)分割成两个子串,再把子串转化为数字,判断这两个数是否是平方数。不是一个数一个数地循环,而是一个平方数一个平方数地循环。
这道题不难,但要注意一些小技巧,比如:
- 判断一个数平方后是否是整数,可以Math.sqrt(n)%1==0,或者Math.round(n)==n (四舍五入后与原来相等)
- 数字转化为字符串,String str=String.valueOf(a)
- 字符串转化为数字,int a=parseInt(str);
- 向上取整,Math.floor(double a)
- 必要的时候可以强制类型转换,int t=(int)Math.floor(s);
import static java.lang.Integer.parseInt; 是 Java 语言中的一种导入语句,允许你在类中直接使用 parseInt 方法,而无需每次都写出完整的路径。这种静态导入主要用于提高代码的可读性和简洁性
import java.util.Scanner;
import static java.lang.Integer.parseInt;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int s=scanner.nextInt();
int e=scanner.nextInt();
int t=(int)Math.floor(Math.sqrt(s));
while(t*t<e){
int a=t*t;
String str=String.valueOf(a);
for(int i=1;i<str.length();i++){
String str1=str.substring(0,i);
String str2=str.substring(i);
int a1=parseInt(str1);
int a2=parseInt(str2);
if((Math.sqrt(a1)%1==0)&&(Math.sqrt(a2)%1==0)&&a2!=0){
System.out.println(str);
break;
}
}
t++;
}
}
}
或
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
for(int i = a;i <= b;i++) {
if(check(i)) {
System.out.println(i);
}
}
}
//判断平方数
public static boolean is_sqrt(int n) {
int t = (int)Math.sqrt(n);
if(t * t == n) {
return true;
}
return false;
}
//判断拼接平方数
public static boolean check(int n) {
String s = String.valueOf(n);
for(int i = 1;i < s.length();i++) {
if(is_sqrt(n) && is_sqrt(Integer.parseInt(s.substring(0,i))) &&
is_sqrt(Integer.parseInt(s.substring(i))) &&
Integer.parseInt(s.substring(0,i)) != 0 &&
Integer.parseInt(s.substring(i)) != 0) {
return true;
}
}
return false;
}
}
parseInt
在Java中,parseInt()方法是Integer类的一个方法,用于将字符串参数解析为有符号的十进制整数。这个方法非常有用,当你需要从字符串中提取整数值时。例如,如果你有一个数字字符串,你想将其转换为整数以进行数学运算。
int number = Integer.parseInt("123");
System.out.println(number); // 输出 123
parseInt()方法有两种形式:一种只接受字符串参数,另一种接受字符串和基数两个参数。当使用第二个参数时,你可以指定字符串应该按照哪个进制来解析
int decimal = Integer.parseInt("15"); // 默认十进制
int binary = Integer.parseInt("1010", 2); // 二进制
int octal = Integer.parseInt("17", 8); // 八进制
int hex = Integer.parseInt("F", 16); // 十六进制
System.out.println(decimal); // 输出 15
System.out.println(binary); // 输出 10
System.out.println(octal); // 输出 15
System.out.println(hex); // 输出 15
如果字符串不是有效的数字或者超出整数范围,parseInt()方法会抛出NumberFormatException异常。因此,在使用这个方法时,最好使用try-catch块来处理可能出现的异常
try {
int number = Integer.parseInt("abc");
} catch (NumberFormatException e) {
System.out.println("字符串不是有效的数字");
}
Java中的substring方法
在Java中,substring方法用于从字符串中提取子字符串。这个方法有两个变体,允许你指定开始索引(包括)和可选的结束索引(不包括)。
substring方法的使用
当你只提供一个参数,即开始索引时,substring方法将返回从该索引开始到字符串末尾的子字符串。例如:
String Str = new String("This is text");
System.out.println(Str.substring(4)); // 输出 "is text"
如果你提供两个参数,开始索引和结束索引,substring方法将返回从开始索引到结束索引之间的子字符串,但不包括结束索引指定的字符。例如:
String Str = new String("This is text");
System.out.println(Str.substring(4, 10)); // 输出 "is te"
例如,如果你需要从一个包含货币符号和金额的字符串中提取金额部分,你可以使用substring方法来实现这一点。以下是一个简单的示例:
String Str = new String("Rs 1000");
System.out.println(Str.substring(3)); // 输出 "1000"
标签:substring,String,int,System,蓝桥,拼接,Integer,parseInt,2014
From: https://blog.csdn.net/2402_85428625/article/details/144515784