• 2.C++相关库函数


    double pow(double base, int exponent)

    pow函数:计算$ base^{exponent} $次方,需要注意y正负号,和效率问题。

    #include<iostream>
    #include<vector>
    using namespace std;
    
    double getResult(double base, int exponent) {
        if(exponent==1) return base;
        if(exponent==0) return 1;
        double res=getResult(base, exponent>>1);
        res *= res;
        if((exponent&1)==1) res = res*base;  //当指数为奇数时,要乘上base
        return res;
    }
    
    double power(double base, int exponent) {
        if(base==0) return 0;  //底为0的时候特殊处理
        bool isNegetive=false; //判断指数是否为负
        if(exponent<0) {
            isNegetive = true;
            exponent=-exponent;
        }
        double result = getResult(base, exponent); // 递归处理,减少运算次数
        if(isNegetive) return 1/result;
        else return result;
    }
    
    int main(){
        cout<<power(2, -3)<<endl;
    
        return 0;
    }
    
    

    void memcpy(void *dest, void *sour, int length)

    memcpy函数:将sour的内容拷贝到dest中,需要注意内存的重叠问题。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void my_memcpy(char *dest,const char * sour,int len)
    {
        char * dst = NULL;
        const char * src = NULL;
        if (dest>=sour+len || dest<=sour){
            dst = dest;
            src = sour;
            while (len--) *dst++ = *src++;
        }else{
            dst = dest + len-1;
            src = sour + len-1;
            while (len--) *dst-- = *src--;
        }
        return;
    }
     
    int main()
    {
        /* 内存不重叠情况*/
        char *source = "didi_Test";
        int len = strlen(source);
        printf("len = %d
    ",len);
        char *dest = NULL;
        dest = (char *)malloc(sizeof(char)*(len+1));
        printf("source = %p , dest = %p
    ",source,dest);
        memset(dest,0,len+1);
        my_memcpy(dest,source,len+1);
        printf("%s
    ",dest);
    
        printf("-----------------------------------------------------------
    ");
        /* 内存重叠情况*/
        char comm_src[50] = "This is memcpy test";
        char *comm_dst = comm_src+10;
        printf("comm_str = %p , comm_dst = %p
    ",comm_src,comm_dst);
        printf("comm_dst - comm_str = %ld
    ",comm_dst - comm_src);
        int comm_len = strlen(comm_src);
        printf("len = %d
    ",comm_len);
        my_memcpy(comm_dst,comm_src,comm_len+1);
        printf("%s
    ",comm_dst);
        printf("%s
    ",comm_src);
    }
    
    

    atoi()函数

    #include<stdio.h>
    #include<stdlib.h>
    #include<ctype.h>
    #include<assert.h>
    _Bool tmp_flag = 0;//判断字符串转换来的数字是否合法 0表示不合法,1表示合法
    int my_atoi(const char*src)
    {
        long long ret = 0;
        int flag = 1;//判断这个字符串转为的数字的正负性。1表示整数,-1表示复数
        assert(src != NULL);//断言src是否为空指针
        while (isspace(*src))//跳过前面的空格
        {
            src++;
        }
        if (*src == '-' || *src == '+')
        {
            if (*src == '-')
                flag = -1;
            src++;//判断完之后一定要向后偏移一个字节。
        }
        while ((*src) && isdigit(*src))//判断字符是不是数字字符
        {
            tmp_flag = 1;//如果是数字字符,把tmp_flag赋值为真
            if (INT_MAX<ret || INT_MIN>ret)//如果转化的结果大于整型最大值或小于整型最新值,就不在往后继续判断,跳出循环
            {
                break;
            }
            ret = ret * 10 + flag*(*src - '0');//把字符串数字转化为整型
            src++;//计算完之后,向后偏移一个字节
        }
        if (*src)//判断字符串是是否还有非数字字符
        {
            tmp_flag = 0;//如果还有非数字字符,把tem_flag赋值为假。
        }
        return (int)ret;
    }
    int main()
    {
        printf("请输入数字字符串:");
        char pc[20] = { 0 };
        scanf("%s", pc);
        int ret = my_atoi(pc);
        printf("%d
    ", atoi(pc));
        if (tmp_flag)//当字符串为合法字符串时,则输出转化后的结果。
            printf("%d
    ", ret);
        system("pause");
        return 0;
    }
    
  • 相关阅读:
    POJ 2155 Matrix
    Codeforces 626D Jerry's Protest 「数学组合」「数学概率」
    Codeforces 626E Simple Skewness 「数学」「二分」
    Codeforces 633D
    Codeforces 631C
    二分查找
    CodeForces 617C【序枚举】
    HDU 4405 【概率dp】
    ZOJ 3329 【概率DP】
    POJ 2096 【期望DP】
  • 原文地址:https://www.cnblogs.com/wangzi199/p/13352527.html
Copyright © 2020-2023  润新知