关于自守数,一个测试用例通不过

自守数
如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数。
显然,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;
}
图片说明
我通不过的那个用例是怎么回事?

5个回答

String input = num.toString();
String power = (num * num).toString(); 呢

yutao929
白宇929 int类型没有toString()方法。
接近 6 年之前 回复

看起来没有什么问题,是不是输入输出不符合系统规定的格式。

yutao929
白宇929 系统提供的接口如我上面描述的一致: 测试用例的大致样式为: public void testCase01() { assertEquals(Demo.isAutoMorphicNum(5),true); assertEquals(Demo.isAutoMorphicNum(10), false); assertEquals(Demo.isAutoMorphicNum(25) ,true); }
接近 6 年之前 回复

#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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐