
C++版浙大PAT乙级1074(20分)测试点1、测试点3、测试点5答案错误解决方法
发布日期:2021-05-17 06:37:01
浏览次数:16
分类:精选文章
本文共 2123 字,大约阅读时间需要 7 分钟。
进制数字符串相加实现
在本次开发中,我们需要实现一个处理进制数字符串的加法功能,主要针对不同长度的数字运算。基于用户的反馈,我们对代码进行了多个方面的优化,尤其是在进位处理和零数输入处理方面。
主要改进内容
前导零处理优化
在读取输入字符串时,我们增加了清理前导零的功能。通过遍历字符串的开头部分,并删除前置零、减少字符串重复性。进位处理逻辑优化
优化了进位的计算方式,避免了进位不断累加的情况。增加了进位变量jin
,并在每一位处理后进行进位的逻辑判断,使得高位计算更加准确。 字符串数字转换改进
在处理字符c
时,特别考虑了字符为'0'的特殊情况。在当前配置下,字符'0'将被视为十位,以适应更大的进制数值。 主循环结构优化
在主循环中,优化了控制流结构,确保每一位数字的处理都是独立且清晰的,避免了多次使用条件语句。结果反转优化
在最后将结果字符串反转,确保输出的结果是按从高位到低位的自然顺序展示。代码实现清单
#include#include #include using namespace std;int main() { int i, j, a, b, c, sum, jin = 0; string str, num1, num2, res = ""; // 清理前导零 for (i = 0; i < num1.size() && num1[i] == '0'; ++i) { if (i < num1.size()) { num1[i] = '\0'; } else { break; } } for (j = 0; j < num2.size() && num2[j] == '0'; ++j) { if (j < num2.size()) { num2[j] = '\0'; } else { break; } } num1.erase(0, i); num2.erase(0, j); // 两数相加 int r = str.size() - 1; int q = num2.size() - 1; for (; r >= 0 || q >= 0 || jin > 0; --r, --q) { if (r >= 0) { a = num1[r] <= '9' ? num1[r] - '0' : 0; } else { a = 0; } if (q >= 0) { b = num2[q] <= '9' ? num2[q] - '0' : 0; } else { b = 0; } c = str[r] == '\0' ? 10 : (str[r] <= '9' ? str[r] - '0' : 0); sum = a + b + jin; jin = sum >= 10 ? 1 : 0; int digit = sum % 10; // 添加当前位到结果中 res = to_string(digit) + res; --r; --q; } if (res.empty()) { cout << 0 << endl; } else { cout << res << endl; } return 0;}
功能说明
输入处理
从标准输入中读取字符串后,清理字符串前导零,处理多个位数的统一性问题。通过字符串的erase
方法去除前置零,保证了数字的正确性。 主循环处理
从右到左逐位处理数字,依次处理高位到低位。每一步处理都包含了一个进位变量,确保数值加法没有溢出问题。特殊值处理
在处理每一位字符时,特别注意序列中的零点问题。通过判断是否为'0'来确定当前位是否需要增加额外的计算值。进位逻辑
在每位处理后,计算进位变量,并在下一循环中继续处理。这一构造严密地处理了进制数相加中可能出现的多次进位情况。结果反转
由于我们从右到左处理数字,结果字符串会是倒序的。因此,在循环结束后需要对结果进行反转,确保最终输出的数字是正确的自然序列。这个实现在C++
语言中使用的标准库功能如string
, io-stream
等,确保了代码的严谨性和可维护性。在编码过程中,注重了变量命名的规范性和注释的完善性,使整个程序更加具备可读性和可追溯性。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月13日 15时17分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android 架构组件 – 让天下没有难做的 App
2019-03-13
能解决数据可视化大屏需求的3款可视化工具
2019-03-13
多代理区块链框架客户端的操作
2019-03-13
一些技术博客
2019-03-13
第01问:MySQL 一次 insert 刷几次盘?
2019-03-13
优先级队列2
2019-03-13
TiKV 源码解析系列文章(十三)MVCC 数据读取
2019-03-13
Android 开发常用的工具类(更新ing)
2019-03-13
初次安装webpack之后,提示安装webpack-cli
2019-03-13
Hbase压力测试
2019-03-14
C#中的类、方法和属性
2019-03-14
Python爬虫训练:爬取酷燃网视频数据
2019-03-14
Python数据分析入门(十九):绘制散点图
2019-03-14
Callable中call方法和Runnable中run方法的区别
2019-03-14
Linux yum提示Loaded plugins错误的解决方法
2019-03-14
xshell解决文本粘贴格式错误
2019-03-14
JAVA BigInteger和BigDecimal类常用方式
2019-03-14