守形數(shù)的概念:
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的巴里坤哈薩克網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
若正整數(shù)n是它的平方數(shù)的尾部,則稱n為守形數(shù),又稱同構(gòu)數(shù)。
根據(jù)定義,可以得到計(jì)算的思路。
1 對(duì)于范圍內(nèi)的每個(gè)數(shù)值,計(jì)算其平方;
2 根據(jù)原數(shù)的位數(shù),截取數(shù)值的尾部;
3 將數(shù)值的尾部與原數(shù)比較,如果相等則為守形數(shù)。
遍歷需要的范圍,即2-1000,逐一判斷即可得到所有的守形數(shù)。
代碼如下
#include?stdio.h
int?main()
{
int?i,?r,?s=1;
for(i?=?2;?i?=?2000;?i++)
{
r?=?i*i;//計(jì)算平方。
if(r/(s*10)?!=?0)?s*=10;?//獲取位數(shù)。
r%=s;//得到尾數(shù)。
if(r?==?i)?printf("%d\n",?i);//是守形數(shù),輸出值,每行一個(gè)。
}
return?0;
}
輸出結(jié)果為
5
6
25
76
376
625
double d=625;
double d1=Math.sqrt(d);
String sd1=""+(int)d1;
String sd=""+(int)d;
if(sd.substring(sd.length()-sd1.length(), sd.length()).equals(sd1)){
System.out.println(true);
}else{
System.out.println(false);
}
首先你判斷守型數(shù)的那個(gè)函數(shù)是錯(cuò)的,你只判斷了N平方數(shù)的最后一位跟N是否一樣,當(dāng)然只能找個(gè)個(gè)位數(shù)的守型數(shù)了。因?yàn)楫?dāng)N位數(shù)為兩位以上時(shí)(比如25) 他的平方數(shù)是625,在你拿625的最后一位5跟他比較當(dāng)然不一樣。正確的應(yīng)該是取最后2位(2即25的位數(shù))。正確的函數(shù)應(yīng)該是:
Private Function Fact(N As Long) As Boolean
Dim M
M = N * N
If Right(CStr(M), Len(CStr(N))) = CStr(N) Then Fact = True
End Function
然后你command1里的代碼也要改改,一方面不夠簡(jiǎn)潔,還有你是找1-2000內(nèi)的,而你代碼卻是1-100范圍的守型數(shù)。
Private Sub Command1_Click()
Dim I As Long, K As Integer
For I = 1 To 2000
If Fact(I) = True Then
K = K + 1
Print I,
If K Mod 4 = 0 Then Print
End If
Next I
End Sub