HJ99 自守数
描述
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n(包括n)以内的自守数的个数
数据范围: 1≤𝑛≤10000 1≤n≤10000
输入描述:
int型整数
输出描述:
n以内自守数的数量。
示例:
输入:6 输出:4 说明:有0,1,5,6这四个自守数
输入:1 输出:2 说明:有0, 1这两个自守数
分析:
1.根据余数是否等于原数。
代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
if(n<1||n>10000){
System.out.println("非法输入!");
return;
}
int num;
int count=0;
for (int i = 0; i <=n ; i++) {
num=i*i;
if(i<10){
if(num%10==i){
//System.out.print(i+" ");
count++;
}
}else if(i<100){
if(num%100==i){
//System.out.print(i+" ");
count++;
}
}else if(i<1000){
if(num%1000==i){
//System.out.print(i+" ");
count++;
}
}else {
if(num%10000==i){
//System.out.print(i+" ");
count++;
}
}
}
//System.out.println();
System.out.println(count);
}
}
大佬代码:
使用字符串的endsWith判断。
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
int count = 0;
for (int i = 0; i <= n; i++) {
String str = String.valueOf(i*i);
String s = String.valueOf(i);
if (str.endsWith(s)) {
count++;
}
}
System.out.println(count);
}
}
}
使用字符串的substring函数和equals函数。
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int count = 0;
for(int i=0;i<=n;i++){
int sum =i*i;
String s1 = String.valueOf(i);
String s2 = String.valueOf(sum);
//从平方的尾部往前截取到与当前数长度相同的子串
if(s2.substring(s2.length()-s1.length()).equals(s1)){
count++;
}
}
System.out.println(count);
}
}
}
看看大佬的取模运算能简化成这样,我的一大堆代码!!!
private static int v1(int n) {
int sqr = 10, count = 0;
for (int i = 0; i <= n; i++) {
if (i >= sqr) {
sqr *= 10;
}
if (Math.pow(i, 2) % sqr == i) {
++count;
}
}
return count;
}