• C语言编程题


    1、将整形a的第m位赋值到整形b的第n位

    int fun4(int a, int m, int b, int n)
    {
        a = (a>>m) & 1;//将a的第m位取出,为1或0,故分两种情况
    
        if(a == 1)//a的第m位为1,即将b的第n位设为1
        {                     
            a = a << n; 
            b =  b | a;       
        }
        else//a的第n位为0,即将b的第n为设为0
        {      
            a = ~(1<<n);
            b = b & a;
        }
    
        return b;
    }
    View Code

    2、判断一个数是2的几次方

    //将2的n次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0,
    //因此问题可以转化为判断1后面跟了几个0就可以了。
    void log2(int value)
    {
        int n = value, count = 0;
    
        if(n & (n-1))//先判断是否是2的幂次方
        {
            cout << n << "不是2的幂次方" << endl;
            return;
        }
    
        while(n > 1)
        {
            n >>= 1;
            count++;
        }
        
        cout << value << "是2的" << count << "次方" << endl;
    }
    View Code

    3、判断一个数是否为质数

    //质数:在大于1的自然数中,除了1和它本身以外不再有其他因数
    bool judge(int n)
    {
        if(n <= 1)
            return false;
        else
        {
            for(int i=2; i<n; i++)
            {
                if(n%i == 0)
                    return false;
            }
        }
    
        return true;
    }
    View Code

    4、输出100至1000之间的偶数为哪两个质数的和,如:100=3+97;102=5+97。

    void fun6()
    {
        for(int i=100; i<=1000; i+=2)
        {
            for(int j=3; j<=i; j++)
            {
                if(judge(j)&&judge(i-j))
            }
        }
    }
    View Code

    5、对整数的十进制显示逐位求和,如13的求和结果为4,-125的求和结果为6

    int fun5(int n)
    {
        static int flag = 0;//欲求和的数为正还是负的标志
        if(n < 0)
        {
            n = -n;
            flag = 1;
        }
    
        if(n/10 > 0)//n大于1位
            return n%10 + fun5(n/10);
        else//n为一位数 
        {
            if(flag)
                return -n;
            else
                return n;
        }
    }
    View Code

    6、实现atoi()

    int my_atoi(char* pStr)
    {
        if (!pStr)
            return 0;
        int iStrLen = strlen(pStr);
    
        //跳过空格
        int i = 0;
        for (; i < iStrLen; i++)
        {
            if (*(pStr + i) != ' ')
                break;
        }
    
        //判断正负
        int iSign = 1;
        if ('+' == *(pStr + i))
        {
            ++i;
        }
        else if ('-' == *(pStr + i))
        {
            iSign = -1;
            ++i;
        }
    
        //转换
        int iNum = 0;
        for (; i < iStrLen; i++)
        {
            char ch = *(pStr + i);
            if (ch >= '0' && ch <= '9')
                iNum = iNum * 10 + (ch - '0');
            else
                break;
        }
    
        return (iNum * iSign);
    }
    View Code

    7、实现itoa()

    char* my_itoa(int iNum, char* pBuf)
    {
        if (!pBuf)
            return nullptr;
    
        //判断正负
        int iSign = 0;
        if (iNum < 0)
        {
            iSign = 1;
            iNum = -iNum;
        }
    
        //转换
        char* p = pBuf;
        if (iSign)
            *p++ = '-';
        do
        {
            *p++ = iNum % 10 + '0';
            iNum = iNum / 10;
        } while (iNum > 0);
        *p = '';
    
        //前后互换
        int iStrLen = strlen(pBuf);
        int i = 0;
        int iHalf = iStrLen / 2;
        if (iSign)
        {
            ++iHalf;
            ++i;
        }
        for (; i < iHalf; i++)
        {
            int iRightIdx = 0;
            iSign ? iRightIdx = iStrLen - 1 - i + 1 : iRightIdx = iStrLen - 1 - i;
    
            char ch = pBuf[i];
            pBuf[i] = pBuf[iRightIdx];
            pBuf[iRightIdx] = ch;
        }
    
        return pBuf;
    }
    View Code

    8、实现strstr()

    /*实现字符串处理strstr():
    对pStr逐字与pSubStr比较,eg:
    A B C D E F
    C D
    pStr中第一个就不同,跳过第一个不再考虑
    
    A B C D E F
    C D
    pStr中第二个也不同,跳过第二个不再考虑
    
    A B C D E F
    C D 
    pStr中有相同的,进行处理*/
    
    char* MyStrstr(char* pStr, char* pSubStr)
    {
        //assert(pStr && pSubStr);
    
        char*pStrAdvance = pStr;
        while (*pStrAdvance)
        {
            char* p = pStrAdvance, *q = pSubStr;
            while (*p && *q)
            {
                if (*p == *q)
                {
                    p++;
                    q++;
                }
                else
                    break;
            }
            if (!*q)
                return pStrAdvance;
    
            pStrAdvance++;
        }
    
        return NULL;
    }
    View Code

     

  • 相关阅读:
    最好的在线打字练习网站
    input 的 type 等于 file
    windows 删除文件或文件夹
    nvm 管理 node 版本
    github 的 fork 取消功能
    window cmd 命令行下创建文件夹和文件
    17_10_11 Redis 指令
    17_10_11 Mac 上的brew 安装指令
    17_10_11 运算符&,&&,>> 和 >>>
    17_10_10 乱码问题总结
  • 原文地址:https://www.cnblogs.com/milanleon/p/5857472.html
Copyright © 2020-2023  润新知