大数加法(A + B Problem Plus)问题
解题思路
两个⼤数可以⽤数组来逐位保存,然后在数组中逐位进⾏相加,再判断该位相加后是否需要进位。为了⽅便计算,可以把数字的低位放到数组的前面,高位放在后面。
样例输入
3
18 22
56 744
53234673473 7544645548767
样例输出
Case 1:
18 + 22 = 40
Case 2:
56 + 744 = 800
Case 3:
53234673473 + 7544645548767 = 7597880222240
代码实现
#include<stdio.h>
#include<string.h>
#define NUM_MAX 1000 // 大数的最大位数
#define CASE_MAX 100 // 示例的最大值
/*
大数加法
参数:
str1为第一个大数,用字符数组保存
str2为第二个大数
sum数组保存相加的结果 即:str1+str2=sum
返回值:返回数组sum的有效长度,即计算结果的位数
*/
void Add(char* numA, char* numB, int* sum)
{
int k = 0;
int l = 0;
int array[NUM_MAX] = {0};
int lenA = strlen(numA); // 计算数组numA的长度,即数A的位数
int lenB = strlen(numB); // 计算数组numB的长度,即数B的位数
int maxLen = lenA > lenB ? lenA : lenB; // 取两个数中大的位数
// 将numA字符数组的数字字符转换为整型数字,且逆向保存在整型数组sum中,即低位在前,高位在后
for (int i = lenA - 1; i >= 0; i--)
{
sum[k++] = numA[i] - '0';
}
// 转换第二个数
for (int j = lenB - 1; j >= 0; j--)
{
array[l++] = numB[j] - '0';
}
// 两个数相加
for (int i = 0; i <= maxLen; i++)
{
sum[i] += array[i]; // 两个数从低位开始相加
if (sum[i] > 9) // 判断是否有进位
{
sum[i] %= 10;
sum[i+1]++;
}
}
if (sum[maxLen] != 0) // 判断最高位是否有进位
{
maxLen++;
}
// 逆向输出求和的结果
for (int i = maxLen - 1; i >= 0; i--)
{
printf("%d", sum[i]);
}
printf("\n");
}
int main()
{
int caseNum = 0;
scanf("%d", &caseNum);
if (caseNum < 1 || caseNum > 100)
{
return 1;
}
char strA[CASE_MAX][NUM_MAX] = {0};
char strB[CASE_MAX][NUM_MAX] = {0};
for (int i = 0; i < caseNum; i++)
{
scanf("%s%s", strA[i], strB[i]);
}
for (int i = 0; i < caseNum; i++)
{
int sum[NUM_MAX] = {0}; // 存放计算的结果,低位在前,高位在后,即sum[0]是低位
printf("Case %d:\n", i + 1);
printf("%s + %s = ", strA[i], strB[i]);
Add(strA[i], strB[i], sum);
// 每个样例之间输出空行
if(i < caseNum)
{
printf("\n");
}
}
return 0;
}
个人主页:
大数加法(A + B Problem Plus)问题的更多相关文章
- A + B Problem II(大数加法)
http://acm.hdu.edu.cn/showproblem.php?pid=1002 A + B Problem II Time Limit: 2000/1000 MS (Java/Other ...
- A + B Problem II 大数加法
题目描述: Input The first line of the input contains an integer T(1<=T<=20) which means the number ...
- 大数加法~HDU 1002 A + B Problem II
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1002 题意: 数学题,A+B; 思路,这个数非常大,普通加法一定会超时,所以用大数加法.大数加法的基 ...
- hdu 1002 A + B Problem II【大数加法】
题目链接>>>>>> 题目大意:手动模拟大数加法,从而进行两个大数的加法运算 #include <stdio.h> #include <strin ...
- 玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)
题目连接:http://www.ifrog.cc/acm/problem/1056 DESCRIPTION Two octal number integers a, b are given, and ...
- 【大数加法】POJ-1503、NYOJ-103
1503:Integer Inquiry 总时间限制: 1000ms 内存限制: 65536kB 描述 One of the first users of BIT's new supercompu ...
- hdu_1041(Computer Transformation) 大数加法模板+找规律
Computer Transformation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- Hat's Fibonacci(大数加法+直接暴力)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1250 hdu1250: Hat's Fibonacci Time Limit: 2000/1000 M ...
- ZZNU 2125:A + B 普拉斯(傻逼题+大数加法)
2125: A + B 普拉斯 时间限制: 1 Sec 内存限制: 128 MB 提交: 94 解决: 28 [提交] [状态] [讨论版] [命题人:admin] 题目描述 "别人总说 ...
随机推荐
- 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_1 今日课程内容介绍
- 八:flask-重定向示例
现象:访问地址a,跳转到地址b,在flask中,使用redirect()来进行重定向 永久性重定向:301,多用于旧网址被废弃了,需要跳转到新网址访问 例如请求www.jingdong.com,会自动 ...
- 系统分析与设计HW2
简答题 1. 简述瀑布模型.增量模型.螺旋模型(含原型方法)的优缺点. 瀑布模型 优点: 定义了软件开发基本流程与活动. 为项目提供了按阶段划分的检查点. 当前一阶段完成后,只需关注后续阶段. 缺点: ...
- Delphi Tokyo 10.2.3发布了
Delphi Tokyo 10.2.3发布了 http://blog.sina.com.cn/s/blog_44fa172f0102wwwg.html (2018-03-14 07:51:32) 转载 ...
- 3.k8s资源控制器rs Deployment Job
k8s资源控制器 #控制器类型 ReplicaSet #rs,确保pod副本数,rs已替代rc Deployment #管理rs,升级.回滚.扩容pod DaemonSet #在每个节点运行一个Pod ...
- IDEA给类和方法配置注释模板(参数换行显示)
创建类模板 1.打开设置:File–>settings–>Editor–>File and Code Templates–>Includes 2.输入注释模板 #if (${P ...
- IntlliJ IDEA 注册码获取或离线破解
JB 的软件还是挺好用的,建议有钱的话支持正版.. IntelliJ IDEA 有开源版,但是要想玩企业级开发,还是得用收费版. 不管哪种方式,使用前都需要把"0.0.0.0 account ...
- PHP 数组函数 内部指针
current( &$arr ) 每个数组的当前单元,初始值的 数组的第一个单元next ( &$arr ) 返回数组中的下一个单元 , 如果没值则返回falshprev ( & ...
- 学习使用CGI和HTML
目标和需求: (1)通过网页查询并设置开发板的网络参数,要求至少可查询IP地址.子网掩码.网关.MAC地址,可设置自动获取IP或固定IP,设置包括查询的内容 (2)使用CGI编程+HTML实现简单数据 ...
- C++中构造函数的手动和自动调用方式
1,对象的构造通过构造函数来完成,和类名相同且没有返回值,这个时候只有参 数一个特性,构造函数可以自定义参数,这个参数一般而言就是对类进行初始 化来使用的:带有参数的构造函数的意义在于可以使得每 ...