“同構數”是指這樣的整數:它恰好出現在其平方數的右端。
如: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時,顯然不是同構數,故不作判定
}
}
}