天天看點

C語言 同構數的算法

“同構數”是指這樣的整數:它恰好出現在其平方數的右端。

如:376*376=141376。請輸出10000以内的全部“同構數”。

算法分析:

1.求出1-10000之間每個數的位數(即這個數是幾位數)。設這個數是i.

//用for循環實作,

2.再求出每個數的平方值,提取出最右端對應位數的數值出來。

//用取模%法實作。

如369是個三個數,它的平方是136161,用取模%法提取出最右三位數字161,即136161%1000=161

3.最後判斷 i 與右端數 是否相等,相等即為同構數。

//用if語句實作判斷

代碼實作:

#include <stdio.h>
main( )
{ for(int i=1;i<=10000;i++)
  { //位數有哪些可能呢?個,十,百,千。
  if(0<=i&&i<=9)//個位數,即一位數
  { if(i==(i*i)%10)//如何表示這些位數呢?
    printf("%d*%d=%d\n",i,i,i*i); 
    }
  if(10<=i&&i<=99)//十位數,即兩位數 
  { if(i==(i*i)%100)
    printf("%d*%d=%d\n",i,i,i*i); 
    }
  if(100<=i&&i<=999)//百位數,即三位數
  { if(i==(i*i)%1000)
    printf("%d*%d=%d\n",i,i,i*i);
    }
  if(1000<=i&&i<=9999)//千位數,即四位數
  { if(i==(i*i)%10000)
    printf("%d*%d=%d\n",i,i,i*i);
    }
  if(i==10000)
  { //當i為10000時,顯然不是同構數,故不作判定 
    } 
   } 
}