1018: A+B again

本文介绍了一种处理大数加法的算法实现方法,通过字符串操作而非传统的整数运算来解决长度可达1000位的大数相加问题。文章提供了一个具体的示例代码,演示了如何逐位进行加法运算并处理进位的情况。

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

题目描述

谷学长有一个非常简单的问题给你,给你两个整数A和B,你的任务是计算A+B。

输入

输入的第一行包含一个整数T(T<=20)表示测试实例的个数,然后2*T行,分别表示A和B两个正整数。注意整数非常大,那意味着你不能用32位整数来处理。你可以确定的是整数的长度不超过1000。

输出

对于每一个样例,你应该输出两行,第一行是"Case #:",#表示第几个样例,第二行是一个等式"A+B=Sum",Sum表示A+B的结果。注意等式中有空格。

样例输入

2
1
2
112233445566778899
998877665544332211

样例输出

Case 1:
1 + 2 = 3
Case 2:

112233445566778899 + 998877665544332211 = 1111111111111111110

示例代码

#include<iostream> #include<cstring> using namespace std; char a[1001],b[1001]; void add(){ char c[1001]; memset(c,'0',1001); for(int i=0;i<strlen(a);i++){ c[i]=a[strlen(a)-1-i]; } memset(a,'0',1001); for(int i=0;i<strlen(b);i++){ a[i]=b[strlen(b)-1-i]; } for(int i=0;i<1000;i++){ a[i]+=c[i]-'0'; if(a[i]>'9'){ a[i]=a[i]-10; a[i+1]=a[i+1]+1; } } } int main(){ int T,n=0; cin>>T; while(T--){ n++; memset(a,'0',1001); memset(b,'0',1001); cin>>a>>b; cout<<"Case "<<n<<":"<<endl; cout<<a<<" + "<<b<<" = "; add(); int k; for(k=1000;k>=0;k--){ if(a[k]!='0'){ break; } } for (int i=k;i>=0;i--){ cout<<a[i]; } cout<<endl; } return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值