codewars,525f4206b73515bffb000b21,Adding Big Numbers

news/2025/3/1 0:39:17/文章来源:https://www.cnblogs.com/l25428455/p/18744392
/*
codewars,525f4206b73515bffb000b21,Adding Big Numbers
写一个实现正整数字符串实现的大整数相加的函数
*/
#include <iostream>
#include <string>
#include <algorithm>std::string add(const std::string& a, const std::string& b) {if(a.empty()){return b;}else if(b.empty()){return a;}std::string num1 = std::string(std::max(a.size(),b.size())-a.size()+1,'0')+a;std::string num2 = std::string(num1.size()-b.size(),'0')+b;/*std::string(size_t n,char c);std::string的构造函数,用于创建一个包含n个字符c的字符串std::string(5,'A');将创建"AAAAA"上面两行代码将字符串a与字符串b的长度统一, 给较短的那个字符串前面补'0',使其长度跟较长的那个一样同时在长度统一后的两个字符串前面均再加上一个'0',以供可能的进位需要,这样可以统一操作*/for(int index = num1.size()-1,carry = 0;index>=0;--index){carry+=num1[index]+num2[index]-96;num1[index] = carry%10+'0';carry/=10;}int i = num1.find_first_not_of('0');/*find_first_not_of()用于查找第一个不在指定字符集合中的字符的位置size_t find_first_not_of(const std::string& str, size_t pos = 0) const;str: 指定的字符集合pos: 开始查找的位置,默认为0返回值如果找到这样的字符,返回其位置如果没有找到,返回std::string::npos*/return i>=0?num1.substr(i):"0";/*substr()方法获取从某个下标开始的子字符串,有两个参数第一个参数是要获取的子字符串起始位置的下标第二个参数是要获取的字符串的长度,如果省略,则默认获取从起始位置到字符串末尾的所有字符*/
}
int main(){std::cout<<add("99","2");
}/*
Best Practice*/
// using namespace std;// string add(string a, string b)
// {
//     a = string(max(a.size(), b.size()) + 1 - a.size(), '0') + a;
//     b = string(a.size() - b.size(), '0') + b;
//     for (int i = a.size()-1, carry = 0; i >= 0; i--)
//     {
//         int sum = a[i] + b[i] - 96 + carry;
//         carry   = sum / 10;
//         a[i]    = sum % 10 + '0';
//     }
//     int i = a.find_first_not_of('0');
//     return 0 <= i ? a.substr(i) : a.substr(0, 1);
// }/*
提问:
for(int i = 0;i<std::min(a.size(),b.size());++i)
这里面,i<std::min()的部分会不会在每次循环进行判断的时候都要执行std::min()函数而导致效率降低,
还是在第一次判断得出结果之后,之后的循环直接使用该结果而不用重复调用std::min()函数
回答:
每次循环判断的确会执行一次 std::min(a.size(), b.size()),不过:
- 编译器优化:现代编译器通常会内联这个函数(因为 std::min 很简单)并且检测到 a.size() 和 b.size() 在循环中未发生变化,从而将计算结果缓存起来,达到优化效果。- 手动缓存:如果担心编译器优化不理想,也可以在循环前缓存结果,例如:#include <algorithm> // 包含 std::min 的头文件
#include <string>std::string add(const std::string& a, const std::string& b) {if(a.empty()){return b;} else if(b.empty()){return a;}const std::size_t minSize = std::min(a.size(), b.size());for(std::size_t i = 0; i < minSize; ++i){// ...此处为处理逻辑...}// ...后续代码...
}使用这种方式可以确保只计算一次。综合来说,在性能影响方面影响非常小,但提前缓存会使代码更明确。
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/891414.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wustctf2020_getshell_2

看到shell函数,可以直接找sh字符ROPgadget --binary wustctf2020_getshell_2 --string "sh"算一下可以发现只溢出返回地址的后一个exp from pwn import * context.log_level=debug io = remote(node5.buuoj.cn,29807) sh=0x08048670 call_sys=0x08048529 payload=cy…

web开发 辅助学习管理系统开发日记 day5

第五天 坚持就是胜利 Q1:在开发条件分页查询的时候要在controller层把所有的变量类型全都生命出来,注意类型不要声明错误,我因为把Localdate 写成了localdatetime 直接让我找了半个小时bug。 在传递日期参数的时候可以用@DateTimeFormat 的注解指定前端传递日期的格式 Q2:在…

【杭电多校训练记录】2025钉耙编程中国大学生算法设计春季联赛 - 热身赛

训练情况赛后反思 有幸抢到了签到题的一血,据说是去年杭电新生赛,题面写的很神秘,简单题差点不会做了,还被卡常TLE了一发 1008 金牌 签到题,统计Au数量和Ag、Cu数量,因为Ag和Cu能合出来一个Au,所以答案是 Au+min(Ag,cu)点击查看代码 #include <bits/stdc++.h> #de…

k8s部署dashboard kubepi

1. KubePi 简介KubePi 是一个开源的 Kubernetes 多集群管理面板,提供以下核心功能: 多集群管理:支持接入多个 Kubernetes 集群统一管理。 可视化操作:提供资源(Pod、Deployment、Service 等)的创建、删除、监控功能。 权限控制:基于角色的访问控制(RBAC),支持多租户隔…

强大数定律与弱大数定律的区别

先来讲一下弱大数定律吧,这个比较好理解 弱大数定律的标准形式是这样的: \[\forall \epsilon>0,\underset{n\rightarrow\infty}{\lim}P(|\bar{X}_n-\mu|<\epsilon)=1 \]这里注意的是我们的极限符号是包含概率的,我们按照数列极限的定义将其写开: \[\forall \epsilon&…

分布式锁—1.原理算法和使用建议

大纲 1.Redis分布式锁的8大问题 2.Redis的RedLock算法分析 3.基于Redis和zk的分布式锁实现原理 4.Redis分布式锁的问题以及使用建议1.Redis分布式锁的8大问题 (1)非原子操作(set+lua) (2)忘了释放锁(手动+超时) (3)释放了其他线程的锁(lua+唯一值) (4)加锁失败的处理(自旋+睡眠…

理解Rust引用及其生命周期标识(上)

写在前面 作为Rust开发者,你是否还没有完全理解引用及其生命周期?是否处于教程一看就会,但在实际开发过程中不知所措?本文将由浅入深,手把手教你彻底理解Rust引用与生命周期。 关于本文的理解门槛 本文主要面向的是已经基本上了解过Rust这门语言,对引用以及生命周期(及其…

TCP/IP协议栈相关知识

为什么提出TCP/IP参考模型OSI参考模型比较复杂TCP和IP两大协议在网络上广泛使用 三种参考模型如今用的最多的是TCP/IP五层模型,而OSI七层模型更多用于学习。 TCP/IP常见协议要了解协议对应的传输层端口号,因为计算机是通过端口号分辨所使用的是那种协议。 应用层要了解常见协…

Vulkan环境配置 | vscode+msvc 解决方案

Vulkan环境配置 | vscode+msvc 解决方案 前言 如果作为Windows 11侠的你是一个vscode爱好者,凑巧电脑上还安装有Visual Studio,这个时候你突然想配置一个Vulkan开发环境。作为minimalist的你可不希望在电脑上安装任何额外的组件,那么这篇安装指南一定适合你。 准备工作 你需…

mysql索引原理简单说明

本次使用的是mysql5.7.17 首先说下索引中的组合索引,即多个字段组合的索引就叫做组合索引,但是什么时候会生效,什么时候会失效,我不是很清楚 首先建个表造点数据看下情况,CREATE TABLE `bank` (`id` INT(11) PRIMARY KEY AUTO_INCREMENT COMMENT 主键,`bank_end` VARCHAR…

Vulnhub-Troll-1靶机-ftp匿名登录+流量包分析+hydra爆破+ssh登录脚本提权

一、靶机搭建 选择扫描虚拟机选择路径即可二、信息收集 扫ip 靶机ip:192.168.108.144扫开放端口 开放了ftp服务扫版本服务信息信息如下 21/tcp open ftp vsftpd 3.0.2 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0) 80/tcp open …