刷题日记补

刷题日记。。补,时间忘了(上周五)

两道简单题


学习内容:

  1. atoi函数实现:https://leetcode.cn/problems/string-to-integer-atoi/description/
    在这里插入图片描述
#define TEN 10
int myAtoi(char* s) {    
    while (*s != '\0' && *s == ' ') {
        ++s; }
    int isNegative = 0;
    if (*s == '-' || *s == '+') {
        isNegative = *s++ == '-'; 
    }
    int ans = 0;
    for (; *s != '\0'; ++s) {
        if (*s < '0' || *s > '9') {
            break;
        }
        int digit = *s - '0';
        if (isNegative) {
            digit = -digit;
            if (ans < (INT_MIN - digit) / 10) {
                return INT_MIN; 
            }
        } else {
            if (ans > (INT_MAX - digit) / 10) {
                return INT_MAX;
            }
        }

        ans = ans * TEN + digit;
    }

    return ans;
}

2.二进制求和 https://leetcode.cn/problems/add-binary/description/
在这里插入图片描述

char* addBinary(char* a, char* b) {
	int len_a = strlen(a);
	int len_b = strlen(b);
	int max_len = len_a > len_b ? len_a : len_b;
	char* rc = (char*)malloc(sizeof(char) * (max_len + 1 + 1));
	rc[max_len + 1] = '\0';
	char* p_a = a + len_a - 1;
	char* p_b = b + len_b - 1;
	int carry = 0;
	int rc_ind = max_len;
	while ((p_a >= a) || (p_b >= b) || carry) {
		int sum = 0;
		int num_a = (p_a >= a) ? (p_a[0] == '0' ? 0 : 1) : 0;
		int num_b = (p_b >= b) ? (p_b[0] == '0' ? 0 : 1) : 0;
		sum = num_a + num_b + carry;
		rc[rc_ind] = '0' + sum % 2;
		carry = sum / 2;
		--rc_ind;
		--p_a;
		--p_b;
	}
	return rc[0] == '1' ? rc : (rc + 1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值