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

    int square(int n)       {           int i = 1;           n = n - i;           while( n > 0 )           {               i += 2;               n -= i;           }           if( n == 0 )        //是某个数的平方               return 1;           else                //不是某个数的平方               return 0;       }  


2.如何判断一个元素的奇偶性?

//判断元素的奇偶性 bool isEven(int data) { 	return((data & 1) == 0 ? true : false); }

if((exponent & 0x1) == 1) //判断是否为奇数

3.判断一字符串是否是对称的。
bool IsSymmetrical(char *pBegin , char *pEnd) { 	if(pBegin == NULL || pEnd == NULL || pBegin > pEnd) 		return false;  	while(pBegin < pEnd) 	{ 		if(*pBegin != *pEnd) 			return false;  		pBegin++; 		pEnd--; 	}  	return true; }


 

4.输入一个整数n,求从1到n这个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。

int NumberOf1(unsigned int n) { 	int number = 0; 	while(n) 	{ 		if(n % 10 == 1) 			number++;  		n = n / 10; 	}  	return number; }  int NumberOf1Between1AndN(unsigned int n) { 	int number = 0;  	for(unsigned int i = 1 ; i <= n ; ++i) 		number += NumberOf1(i);  	//cout< 
  


实现代码:

#include using namespace std;  int NumberOf1(unsigned int n) { 	int number = 0; 	while(n) 	{ 		if(n % 10 == 1) 			number++;  		n = n / 10; 	}  	return number; }  void NumberOf1Between1AndN(unsigned int n) { 	int number = 0;  	for(unsigned int i = 1 ; i <= n ; ++i) 		number += NumberOf1(i);  	cout< 
  


 5.判断一个数是否是素数。

bool isPrime(int n) {      for(int i = 2 ; i <= sqrt(n) ; i++)     {         if(n % i == 0)             return false;     }     return true; }