网站公告 | 这是第三条公告我的广告
微信扫一扫 分享朋友圈

已有 117 人浏览分享

高精度

[复制链接]
我是一名中学生
6666666
:1 天
:1 天

47

主题

14

回帖

1999万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
19990001

最佳新人活跃会员热心会员突出贡献优秀版主论坛元老

发表于 2025-6-13 20:49:45 | 显示全部楼层 | 阅读模式 来自 中国山东
[C++] 纯文本查看 复制代码
#include <iostream>
#include <string>
#include <algorithm> // 用于反转字符串
using namespace std;

// 去除字符串的前导零
string removeLeadingZeros(string str) {
    // 找到第一个不是 '0' 的字符的位置
    size_t pos = str.find_first_not_of('0');
    // 如果全是 '0',返回 "0"
    if (pos == string::npos) {
        return "0";
    }
    // 去掉前导零
    return str.substr(pos);
}

// 大整数加法
string addBigIntegers(string num1, string num2) {
    // 去除前导零
    num1 = removeLeadingZeros(num1);
    num2 = removeLeadingZeros(num2);

    // 确保 num1 是较长的字符串
    if (num1.length() < num2.length()) {
        swap(num1, num2);
    }

    // 对齐位数,在较短的字符串前面补零
    while (num2.length() < num1.length()) {
        num2 = '0' + num2;
    }

    string result = ""; // 存储结果
    int carry = 0;      // 进位

    // 从最低位开始逐位相加
    for (int i = num1.length() - 1; i >= 0; i--) {
        int digit1 = num1[i] - '0'; // 将字符转换为数字
        int digit2 = num2[i] - '0';
        int sum = digit1 + digit2 + carry; // 当前位的和
        carry = sum / 10;                 // 计算进位
        result.push_back((sum % 10) + '0'); // 将当前位的数字加入结果
    }

    // 如果最后还有进位,添加到结果前面
    if (carry) {
        result.push_back(carry + '0');
    }

    // 反转结果字符串,得到正确的顺序
    reverse(result.begin(), result.end());

    // 去除结果中的前导零
    result = removeLeadingZeros(result);

    return result;
}

int main() {
    string num1, num2;
    cin >> num1 >> num2; // 输入两个大整数

    string result = addBigIntegers(num1, num2); // 计算和
    cout << result << endl; // 输出结果

    return 0;
}

回复

使用道具 举报

文明发言,和谐互动
文明发言,和谐互动
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

47

主题

QQ|手机版|小黑屋|山东智趣岛论坛 ( 鲁ICP备2023024048号 )

GMT+8, 2025-7-1 18:09 , Processed in 0.289655 second(s), 57 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.