大数求和问题

2024-09-02 16:58
文章标签 问题 大数 求和

本文主要是介绍大数求和问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A + B Problem II

Problem Description

I have a very simple problem for you. Given two  integers(整数) A and B, your job is to calculate the Sum of A + B.

Input

The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers(正整数), A and B. Notice that the integers are very large, that means you should not process(处理) them by using 32-bit integer (32位整数).You may assume(假设) the length of each integer will not exceed(超过) 10000

Output

For each test case (测试示例), you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation(方程) "A + B = Sum", Sum means the result of A + B. Note there are some spaces in the equation. Output a blank line between two test cases.

Sample Input

2
1 2
112233445566778899 998877665544332211

Sample Output

Case 1:
1 + 2 = 3Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

两数简单求和一般这样写

#include <iostream>
using namespace std;
int main()
{int a,b;cin>>a>>b;cout<<a+b<<endl;return 0;
}

输入程序结束条件,例如输入0 0结束本程序

#include <iostream>
using namespace std;
int main()
{int a,b;while(cin>>a>>b&&a||b)cout<<a+b<<endl;return 0;
}
输入n控制求和次数

#include <iostream>
using namespace std;
int main()
{int n;cin>>n;int i;for(i=1;i<=n;i++){int a,b;cin>>a>>b;cout<<a+b<<endl;}return 0;
}
在加上相应的格式
#include <iostream>
using namespace std;
int main()
{int n;cin>>n;int i;for(i=1;i<=n;i++){int a,b;cin>>a>>b;cout<<"Case "<<i<<":"<<endl;cout<<a<<" + "<<b<<" = "<<a+b<<endl;if(i!=n)cout<<endl;//注意最后一个数不用输出换行}return 0;
}

但是由于此题要考虑大数相加,即所谓的高精度运算(所谓的高精度运算,是指参与运算的数范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。例如,求两个200位的数的和。这时,就要用到高精度算法了。)之加法。
 运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示。在Pascal中,能表示多个数的数据类型有两种: 数组和字符串
数组:每个数组元素存储1位(在优化时,这里是一个重点!),有多少位就需要多少个数组元素;用数组表示数的优点:每一位都是数的形式,可以直接加减;运算时非常方便。用数组表示数的缺点:数组不能直接输入;输入时每两位数之间必须有分隔符,不符合数值的输入习惯;
字符串:String型字符串的最大长度是255,可以表示255位。Ansistring型字符串长度不受限制。用字符串表示数的优点:能直接输入输出,输入时,每两位数之间不必分隔符,符合数值的输入习惯;用字符串表示数的缺点:字符串中的每一位是一个字符,不能直接进行运算,必须先将它转化为数值再进行运算;运算时非常不方便;

综合以上所述,对上面两种数据结构取长补短:用字符串读入数据,用数组存储数据

#include <iostream>
#include <cstring>
using namespace std;
int main()
{int a1[2000],b1[2000],lena,lenb,i;char a[2000],b[2000];cin>>a>>b;lena=strlen(a);  lenb=strlen(b);//测量输入字符串的长度for(i=0;i<lena;i++)  a1[i]=a[i]-48;  for(i=0;i<lenb;i++)  b1[i]=b[i]-48;//0的ASCII码是48,将字符串转换为数组,或者可以:b1[i]=b1[i]-'0'; for(i=0;i<lena;i++)cout<<a1[i];for(i=0;i<lenb;i++)cout<<b1[i];return 0;
}



现在已经将输入的两个大数存入到了数组中,接下来就是处理数组了。
#include <iostream>
#include <string.h>
using namespace std;
int main()
{int n;cin>>n;int t=1;char a[1000],b[1000];int c[1000];while(n--){cin>>a>>b;cout<<"Case "<<t<<":"<<endl;t++;cout<<a<<" + "<<b<<" = ";int lena=strlen(a);int lenb=strlen(b);int lenmax,i;if(lena>lenb){lenmax=lena;for( i=lenmax-1;i>=0;i--){b[i]=b[i-(lenmax-lenb)];}for( i=0;i<lena-lenb;i++){b[i]='0';}}else if(lenb>lena){lenmax=lenb;for( i=lenmax-1;i>=0;i--){a[i]=a[i-(lenmax-lena)];}for( i=0;i<lenb-lena;i++){a[i]='0';}}elselenmax=lena;int flag=0;int k=0;for( i=lenmax-1;i>=0;i--){if((a[i]-'0')+(b[i]-'0')+flag<10){c[k]=(a[i]-'0')+(b[i]-'0')+flag;flag=0;}else if((a[i]-'0')+(b[i]-'0')+flag>=10){c[k]=((a[i]-'0')+(b[i]-'0')+flag)%10;flag=1;}k++;}if(flag==1){c[k]=1;k++;}for( i=k-1;i>=0;i--)cout<<c[i];cout<<endl;if(n)cout<<endl;}return 0;
}






这篇关于大数求和问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130537

相关文章

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到