今天看到一個比較有意思的概念,叫做同構數。同構數是一個數字,它的平方數與數字本身的尾數相同。
例如,25是一個同構數,因為25的平方是625,它的結尾是25。同樣地,76是一個同構數,因為76的平方是5776,同樣以76結尾。
判斷一個數是否是同構數
有許多算法可以用來確定一個數字是否是同構,接下來我們選幾種來看看。
在數字上循環并進行比較
驗證一個數字是否同構大概有以下幾個步驟:
- 計算數字平方數
- 獲取平方數的最后一位數字并與數字的最后一位數字進行比較 如果最后一位數字不相等,則該數字不是一個同構數 如果最后一位數字相等,則進入下一步
- 刪除數字和平方的最后一位數字
- 重復步驟2/3,直到數字的所有數字都得到比較
上述方法以相反的方式對輸入數字的數字進行循環。
我們現在寫一個Java程序來實現, isAutomorphicUsingLoop()
方法將一個整數作為輸入,并檢查它是否是同構數。
public boolean isAutomorphicUsingLoop(int number) {
int square = number * number;
while (number > 0) {
if (number % 10 != square % 10) {
return false;
}
number /= 10;
square /= 10;
}
return true;
}
在任何一個步驟,如果最后一位數字不相等,我們就返回false 。否則,我們就去掉最后一個數字,對number的剩余數字重復這個過程。
我們可以通過以下的代碼來驗證這個方法是否可行。
測試用例:
assertTrue(AutomorphicNumber.isAutomorphicUsingLoop(76));
assertFalse(AutomorphicNumber.isAutomorphicUsingLoop(25));
直接比較數字
當然我們還可以用更直接的方法來確定一個數字是否是同構數。
- 得到數字并計算數字的位數n
- 計算數字的平方數
- 從平方數中得到最后的n個數字,如果平方數中的最后n個數字與原始數字相同,則該數字是同構的,否則就不是同構數
在這種情況下,我們不需要對數字的位數進行循環。我們可以直接使用Math庫來完成數字的長度以及平方數的最后幾位的計算。
代碼示例:
public boolean isAutomorphicUsingMath(int number) {
int square = number * number;
int numberOfDigits = (int) Math.floor(Math.log10(number) + 1);
int lastDigits = (int) (square % (Math.pow(10, numberOfDigits)));
return number == lastDigits;
}
與第一種方法類似,我們先計算number的平方。現在我們不是逐一比較number和square的最后一位數字,而是通過使用 Math.floor() 一次性得到 number 的總的 numberOfDigits 。然后通過使用 Math.pow() 從square提取盡可能多的數字。最后,我們將輸入的number與提取的數字lastDigits進行比較。
如果number和lastDigits相等,這個數字就是同構的,我們返回 true ,否則,我們返回 false 。
測試用例:
assertTrue(AutomorphicNumber.isAutomorphicUsingMath(76));
assertFalse(AutomorphicNumber.isAutomorphicUsingMath(25));
總結
在這篇文章中,我們了解了什么是同構數,還學習了幾種確定一個數是否為同構數的方法,以及相應的Java程序。
-
數字
+關注
關注
1文章
1693瀏覽量
51402 -
代碼
+關注
關注
30文章
4827瀏覽量
69053 -
java程序
+關注
關注
0文章
12瀏覽量
7590
發布評論請先 登錄
相關推薦
基于Iceberg概念格疊置半集成的全局閉頻繁項集挖掘算法
labview尋找同構數,你準備好了嗎?
labview同構數最快和最小VI程序展示
步進電機相關參數的概念是什么?
介紹步進電機使用的幾個概念
加性細胞自動機的同構性分析
對同構和異構設計的再思考
前端同構MVC實踐分析
基于導數序列的時間序列同構關系
![基于導數序列的時間序列<b class='flag-5'>同構</b>關系](https://file.elecfans.com/web2/M00/49/7C/poYBAGKhwLyAOxCnAAARJUnZkbg916.jpg)
計及無功潮流影響的傳輸介數概念
![計及無功潮流影響的傳輸介<b class='flag-5'>數</b><b class='flag-5'>概念</b>](https://file.elecfans.com/web1/M00/46/7A/o4YBAFqeZQqAP1lPAACJk5APtNI965.jpg)
FPGA產生基于LFSR的偽隨機數概念
![FPGA產生基于LFSR的偽隨機<b class='flag-5'>數</b><b class='flag-5'>概念</b>](https://file.elecfans.com/web1/M00/E9/4C/pIYBAGBm2F-ATqHfAAAYPC4Ib2c890.png)
邏輯復制的概念與原理
多核同構SMP--調度算法分析
![多核<b class='flag-5'>同構</b>SMP--調度算法分析](https://file1.elecfans.com/web2/M00/8C/5B/wKgZomSrdxmAEzLiAAAmTO8GKfw794.png)
評論