C語言20行程式碼求小於等於10000的所有同構數。
阿新 • • 發佈:2018-11-13
問題:平方後低位的數恰好等於該數的數是同構數。求小於10000的所有同構數。
編譯環境:vc6.0
#include<stdio.h> #include<math.h> //呼叫 pow()函式。 void main() { int n,i,m,k; //定義:n為位數,i為迴圈數, //m和k為i的平方數(兩者用途不同,k可以用i*i代替)。 for(i = 1;i <= 10000;i++){ //迴圈。(範圍為1~10000,可修改) k = i * i; n = 1; //當平方數小於1時,位數為1. m = k; while(m >= 10) {n++;m /= 10;} //算平方數的位數。 if(n % 2 == 0){ //當平方數的位數為偶數時。 //注:此處大括號不可去,否則第二個if會與else對齊。 if(i == k % (int)pow(10,(n / 2))) //判斷 i 是否等於 平方數 對 低位的數 取得的餘數。 printf("%d\n",i);} //輸出 i ,若想在輸出平方數,則加上 k 即可。 else{ //當平方數的位數為奇數時。注:此處大括號可去。 if(i == k % (int)pow(10,((n + 1) / 2))) printf("%d\n",i);} } system("pause"); //vc6.0 需在for迴圈後加上 system("pause"); }
關於這一行程式碼:
if(i == k % (int)pow(10,(n / 2)))
1、k可以用 i*i 代替。
2、取餘符號 % 不能用於浮點數,只能用於整數。
3、pow()函式在vc6.0裡原型為 double pow( double x, double y ); 返回值為double型別,故需要轉化為int型。
4、程式碼的意思是 先計算平方數 i*i 的低位位數(即把平方數 向上取 對半分,分為高位數和低位數兩部分,比如數 964852 的低位數為 852,位數即3,;數26547 的低位數為 547 ,位數即 3),然後對平方數對 10 的低位位數次冪 取餘(比如當 k 為 3264 時,取餘後為 64,低位位數次冪為 2),最後與 i 相比較。
5、這裡的pow()函式可用 e+... 來表示10的n次方。
程式碼運算結果為: