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\n",len);
    char *dest = NULL;
    dest = (char *)malloc(sizeof(char)*(len+1));
    printf("source = %p , dest = %p\n",source,dest);
    memset(dest,0,len+1);
    my_memcpy(dest,source,len+1);
    printf("%s\n",dest);

    printf("-----------------------------------------------------------\n");
    /* 内存重叠情况*/
    char comm_src[50] = "This is memcpy test";
    char *comm_dst = comm_src+10;
    printf("comm_str = %p , comm_dst = %p\n",comm_src,comm_dst);
    printf("comm_dst - comm_str = %ld\n",comm_dst - comm_src);
    int comm_len = strlen(comm_src);
    printf("len = %d\n",comm_len);
    my_memcpy(comm_dst,comm_src,comm_len+1);
    printf("%s\n",comm_dst);
    printf("%s\n",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\n", atoi(pc));
    if (tmp_flag)//当字符串为合法字符串时,则输出转化后的结果。
        printf("%d\n", ret);
    system("pause");
    return 0;
}

原文链接: https://www.cnblogs.com/wangzi199/p/13352527.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    2.C++相关库函数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/368673

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午6:33
下一篇 2023年3月2日 下午6:33

相关推荐