• 编程小技巧


    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

    1. int square(int n)    
    2. {    
    3.     int i = 1;    
    4.     n = n - i;    
    5.     while( n > 0 )    
    6.     {    
    7.         i += 2;    
    8.         n -= i;    
    9.     }    
    10.     if( n == 0 )        //是某个数的平方    
    11.         return 1;    
    12.     else                //不是某个数的平方    
    13.         return 0;    
    14. }    


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

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

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

    3.判断一字符串是否是对称的。
    1. bool IsSymmetrical(char *pBegin , char *pEnd)  
    2. {  
    3.     if(pBegin == NULL || pEnd == NULL || pBegin > pEnd)  
    4.         return false;  
    5.   
    6.     while(pBegin < pEnd)  
    7.     {  
    8.         if(*pBegin != *pEnd)  
    9.             return false;  
    10.   
    11.         pBegin++;  
    12.         pEnd--;  
    13.     }  
    14.   
    15.     return true;  
    16. }  


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

    1. int NumberOf1(unsigned int n)  
    2. {  
    3.     int number = 0;  
    4.     while(n)  
    5.     {  
    6.         if(n % 10 == 1)  
    7.             number++;  
    8.   
    9.         n = n / 10;  
    10.     }  
    11.   
    12.     return number;  
    13. }  
    14.   
    15. int NumberOf1Between1AndN(unsigned int n)  
    16. {  
    17.     int number = 0;  
    18.   
    19.     for(unsigned int i = 1 ; i <= n ; ++i)  
    20.         number += NumberOf1(i);  
    21.   
    22.     //cout<<number<<endl;  
    23.     return number;  
    24. }  


    实现代码:

    1. #include<iostream>  
    2. using namespace std;  
    3.   
    4. int NumberOf1(unsigned int n)  
    5. {  
    6.     int number = 0;  
    7.     while(n)  
    8.     {  
    9.         if(n % 10 == 1)  
    10.             number++;  
    11.   
    12.         n = n / 10;  
    13.     }  
    14.   
    15.     return number;  
    16. }  
    17.   
    18. void NumberOf1Between1AndN(unsigned int n)  
    19. {  
    20.     int number = 0;  
    21.   
    22.     for(unsigned int i = 1 ; i <= n ; ++i)  
    23.         number += NumberOf1(i);  
    24.   
    25.     cout<<number<<endl;  
    26. }  
    27.   
    28. int main()  
    29. {  
    30.     int n = 12;  
    31.     NumberOf1Between1AndN( n);  
    32.   
    33.     return 0;  
    34. }  


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

      1. bool isPrime(int n)  
      2. {   
      3.     for(int i = 2 ; i <= sqrt(n) ; i++)  
      4.     {  
      5.         if(n % i == 0)  
      6.             return false;  
      7.     }  
      8.     return true;  

  • 相关阅读:
    valgrind检查:Conditional jump or move depends on uninitialised value(s)
    信号 SIGPIPE
    Snapdragon——1.定位游戏瓶颈
    unity修改所选路径下的,对象的importer属性
    git命令行
    ue4 lightmass研究
    leecode保存 简单题到ZY转换
    ue4 skybox
    ue4导入staticMesh
    uml类图的几种关系
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3386378.html
Copyright © 2020-2023  润新知