HDU1047 - Integer Inquiry (大数加法)

本文介绍了一种使用C++实现的大数加法算法,通过字符串操作来处理超出基本数据类型范围的加法运算。文章详细展示了如何通过逆序处理输入的数字字符串并逐位相加,同时处理进位的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

思路

大数加法,这道题的格式一直没控制好,PE了好长时间。

代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

char ans[110];
char num[110];

void reverse(char *str)
{
    int len = strlen(str);
    for(int i=0; i<len/2; i++)
        swap(str[i], str[len-i-1]);
}

void add(char *str, char *num)
{
    int i=0, temp=0;
    for( ; str[i]&&num[i]; i++)
    {
        temp = str[i] + num[i] - '0' * 2 + temp;
        str[i] = (temp%10) + '0';
        temp /= 10;
    }

    if(!num[i]&&!str[i]&&temp) str[i] = temp + '0';
    else if(!num[i])
    {
        for(; str[i]; i++)
        {
            temp = str[i] - '0' + temp;
            str[i] = (temp%10) + '0';
            temp /= 10;
        }
        if(temp) str[i] = temp + '0';
    }
    else
    {
        for(; num[i]; i++)
        {
            temp = num[i] - '0' + temp;
            str[i] = (temp%10) + '0';
            temp /= 10;
        }
        if(temp) str[i] = temp + '0';
    }
}

void print(char *str)
{
    reverse(str);
    for(int i=0; str[i]; i++) printf("%c", str[i]);
    printf("\n");
}

int main()
{
    int t;
    bool first = true;

    scanf("%d", &t);
    while(t--)
    {
        if(first) first = false;
        else printf("\n");

        memset(ans, 0, sizeof(ans));
        while(true)
        {
            scanf("%s", num);
            if(num[0]=='0') break;
            reverse(num);
            add(ans, num);
        }
        if(ans[0]=='\0') printf("0\n");
        else print(ans);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值