1.判斷乙個自然數是否是某個數的平方?(其實就是判斷這個數一定是奇數相加的)
由於(n+1)^2
=n^2 + 2n + 1,
= ...
= 1 + (2*1 + 1) + (2*2 + 1) + ... + (2*n + 1)
注意到這些項構成了等差數列(每項之間相差2)。
所以我們可以比較 n-1, n - 1 - 3, n - 1 - 3 - 5 ... 和0的關係。
如果大於0,則繼續減;如果等於0,則成功退出;如果小於 0,則失敗退出。
複雜度為o(n^0.5)。不過方法3中利用加減法替換掉了方法1中的乘法,所以速度會更快些。
例如:3^2 = 9 = 1 + 2*1+1 + 2*2+1 = 1 + 3 + 5
4^2 = 16 = 1 + 2*1 + 1 + 2*2+1 + 2*3+1
[cpp]view plain
copy
int square(int n)
if( n == 0 ) //是某個數的平方
return 1;
else
//不是某個數的平方
return 0;
}
2.如何判斷乙個元素的奇偶性?
[cpp]view plain
copy
//判斷元素的奇偶性
bool iseven(int data)
[html]view plain
copy
if((exponent & 0x1) == 1) //判斷是否為奇數
3.判斷一字串是否是對稱的。
[cpp]view plain
copy
bool issymmetrical(char *pbegin , char *pend)
return
true;
}
4.輸入乙個整數n,求從1到n這個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次。
[cpp]view plain
copy
int numberof1(unsigned int n)
return number;
} int numberof1between1andn(unsigned int n)
實現**:
[cpp]view plain
copy
#include
using
namespace std;
int numberof1(unsigned int n)
return number;
} void numberof1between1andn(unsigned int n)
int main()
5.判斷乙個數是否是素數。
[cpp]view plain
copy
bool isprime(int n)
return
true;
}
程式設計小技巧
define conn x,y x y define tochar x x define tostring x x x y表示什麼?表示x連線y,舉例說 int n conn 123,456 結果就是n 123456 char str conn asdf adf 結果就是 str asdfadf 怎...
程式設計小技巧
1.如何通過輸入一組任意長度的數字序列?char inchar n int num n int i 0 int len 0 scanf s inchar len strlen inchar printf len d len for i 0 i 2.scanf gets 與getchar 的區別 ge...
程式設計小技巧
1 判斷奇數 if n 0x1 或用用 x 2 0,不要用 x 2 1,因為x可能是負 數。2 在判斷兩個浮點數 a 和 b 是否相等時,不要用 a b,應該判斷二者之差的絕對值 fabs a b 是否小於某個閾值,例如 1e 9 3 用 char 的值作為陣列下標 例如,統計字串中每個字元出現的次...