华为-自守数
(java实现)
题目描述:
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n以内的自守数的个数
接口说明
/*
功能: 求出n以内的自守数的个数
输入参数:
int n
返回值:
n以内自守数的数量。
/
public static int CalcAutomorphicNumbers( int n)
{
/*在这里实现功能/
return 0;
}
本题有多组输入数据,请使用while(cin>>)等方式处理
输入描述:
int型整数
输出描述:
n以内自守数的数量。
示例1:
输入
2000
输出
8
问题分析:
思路一:通过数学计算来实现。
思路二:将数字转为字符串,进行字符串匹配。
相关知识:
思路二:
Java中的int与String互相转换方式
一、String转int有两种方式
(1)Integer.parseInt(str)
(2)Integer.valueOf(str).intValue()
二、int转String有三种方式
(1)num + ""
(2)String.valueOf(num)
(3)Integer.toString(num)
使用第一种方法相对第二第三种耗时比较大
String.valueOf():采用String.valueOf(object)的基础是Object#toString(),但这里不用担心object是否为null这一问题,JDK中String#valueOf(object)源码:
参考代码:
思路一实现:
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { int n = input.nextInt(); System.out.println(CalAutomorphicNumbers(n)); } } public static int CalAutomorphicNumbers(int n) { if (0==n) { return 1; } int count = 1; for (int i=1; i<=n; i++) { String str = Integer.toString(i); int len = str.length(); int tmp = (int)(i*i/(Math.pow(10,len))); tmp = (int)(tmp*Math.pow(10,len)) + i; if (tmp == i*i) count++; } return count; } }
思路二实现:
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { int num = input.nextInt(); int sum = 0; for (int i=0; i<=num; i++) { String s1 = Integer.toString(i); String s2 = Integer.toString(i*i); int pos = s2.length() - s1.length(); if (s1.equals(s2.substring(pos))) sum++; } System.out.println(sum); } } }