C语言——高精度加法

描述

输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

提示:

  1. 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
  2. 定义一个数组A,A0用于存储a的个位,A1用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
  3. 计算c = a + b的时候,首先将A0与B0相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C0,即C0等于(A0+B0)%10。然后计算A1与B1相加,这时还应将低位进上来的值r也加起来,即C1应该是A1、B1和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C1中。依此类推,即可求出C的所有位。
  4. 最后将C输出即可。

输入

输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。

输出

输出一行,表示a + b的值。

输入样例 1

复制代码
20100122201001221234567890
2010012220100122

输出样例 1

复制代码
20100122203011233454668012

C++代码:

cpp 复制代码
#include <string.h>
#include <stdio.h>
void reverse(char *str){
    int i = 0, j = strlen(str) - 1;
    for (; i < j; ++i, --j){
        char temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}
void stradd(char *a, char *b, char *c){
    reverse(a); // 反转字符串 以便从个位开始计算
    reverse(b);
    int flag = 0;
    int a_longer_than_b = 0;
    if (strlen(a) > strlen(b)){
        a_longer_than_b = 1;
    }
    else{
        a_longer_than_b = 0;
    }
    int max_a_b = strlen(a) > strlen(b) ? strlen(a) : strlen(b);
    int min_a_b = strlen(a) > strlen(b) ? strlen(b) : strlen(a);
    int i = 0;
    for (; i < min_a_b; ++i) { // 先计算a和b都有的位
        int temp = a[i] - '0' + b[i] - '0' + flag;
        if (temp >= 10){
            c[i] = temp % 10 + '0';
            flag = 1;
        }
        else{
            c[i] = temp + '0';
            flag = 0;
        }
    }
    for (; i < max_a_b; ++i){ // 较小的数已经算完了,将另一个数的剩余部分加到结果中
        if (a_longer_than_b){
            int temp = a[i] - '0' + flag;
            if (temp >= 10){
                c[i] = temp % 10 + '0';
                flag = 1;
            }
            else{
                c[i] = temp + '0';
                flag = 0;
            }
        }
        else{
            int temp = b[i] - '0' + flag;
            if (temp >= 10){
                c[i] = temp % 10 + '0';
                flag = 1;
            }
            else{
                c[i] = temp + '0';
                flag = 0;
            }
        }
    }

    if (flag == 1) { // 考虑最后进位的情况
        c[max_a_b] = '1';
        c[max_a_b + 1] = '\0';
    }
    reverse(c);
}
int main()
{
    char a[102] = {0};
    char b[102] = {0};
    char c[102] = {0};
    fgets(a, 102, stdin);
    if (a[strlen(a) - 1] == '\n'){
        a[strlen(a) - 1] = '\0';
    }
    fgets(b, 102, stdin);
    if (b[strlen(b) - 1] == '\n'){
        b[strlen(b) - 1] = '\0';
    }
    stradd(a, b, c);
    printf("%s\n", c);
    return 0;
}
相关推荐
不相心 -w-几秒前
Cmake的基础用法
linux·开发语言·c++
白白白小纯2 分钟前
每日算法day3—回文链表,链表分割
c语言·数据结构·算法·leetcode
撑伞的鱼993714 分钟前
C++开发用什么AI编程工具效果好?2026年实测横评(附选型指南)
开发语言·c++·ai编程·cursor
大数据张老师21 分钟前
Typora 导出 Word 模版操作手册
开发语言·c#·word·typora
略略略咯咯25 分钟前
stream流浅拷贝
开发语言·python
手写码匠26 分钟前
华为云Flexus+DeepSeek征文|Dify 构建企业级联网搜索 Agent:查询改写、多源检索与引用溯源实战
人工智能·深度学习·算法·aigc
long31627 分钟前
Java 团队入门到精通学习资料
java·开发语言
七夜zippoe29 分钟前
DolphinDB 能耗统计分析实战:报表生成、同比环比与定额对比
人工智能·算法·dolphindb·报表生成·能耗统计·定额对比
城管不管38 分钟前
rabbitmq如何保证消息不丢失?解决方案又是什么?
开发语言·ai·面试·职场和发展·rabbitmq·php·agent
为啥全要学39 分钟前
在大语言模型上使用 PPO 算法
人工智能·算法·语言模型