自守数
如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数。
显然,5和6是一位自守数(5x5=25 6x6=36),25x25=625 76x76=5776,所以25和76是两位自守数。
详细描述:
接口说明
原型:
Public static boolean isAutoMorphicNum( int num)
输入参数:
num 需要判断的数
输出参数(指针指向的内存区域保证有效):
无
返回值:
true 是自守数
false 不是自守数
涉及知识点:
JAVA语言基础:数字处理
我写的程序:
public static boolean isAutoMorphicNum(int num)
{
String input = num + "";
String power = num * num + "";
System.out.println(num * num);
if (input.equals(power.substring(power.length() - input.length()))) {
return true;
}
return false;
}
我通不过的那个用例是怎么回事?
String input = num.toString();
String power = (num * num).toString(); 呢
看起来没有什么问题,是不是输入输出不符合系统规定的格式。
#include
#include
int main()
{
long mul,number,k,ll,kk;
for (number = 0;number {
//由number的位数确定截取数字,进行乘法时的系数k
for(mul = number,k = 1;(mul /= 10)>0;k*=10);
kk = k*10; //截取部分乘积时的系数
mul = 0; //积的最后N位
ll = 10; //截取乘数时的系数
while(k>0)
{
//(部分积+截取被乘数的后N位*截取乘数的第M位)%kk再截取部分积
mul = (mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk;
k/=10; //截取被乘数时的系数
ll*=10;
}
if (number == mul)
{
printf("%ld ",number);
}
}
return 0;
}
考虑溢出,num * num你变成(long)num * num