解题思路

两个⼤数可以⽤数组来逐位保存,然后在数组中逐位进⾏相加,再判断该位相加后是否需要进位。为了⽅便计算,可以把数字的低位放到数组的前面,高位放在后面。

样例输入

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;
}

个人主页:

www.codeapes.cn

大数加法(A + B Problem Plus)问题的更多相关文章

  1. A + B Problem II(大数加法)

    http://acm.hdu.edu.cn/showproblem.php?pid=1002 A + B Problem II Time Limit: 2000/1000 MS (Java/Other ...

  2. A + B Problem II 大数加法

    题目描述: Input The first line of the input contains an integer T(1<=T<=20) which means the number ...

  3. 大数加法~HDU 1002 A + B Problem II

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1002 题意: 数学题,A+B; 思路,这个数非常大,普通加法一定会超时,所以用大数加法.大数加法的基 ...

  4. hdu 1002 A + B Problem II【大数加法】

    题目链接>>>>>> 题目大意:手动模拟大数加法,从而进行两个大数的加法运算 #include <stdio.h> #include <strin ...

  5. 玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)

    题目连接:http://www.ifrog.cc/acm/problem/1056 DESCRIPTION Two octal number integers a, b are given, and ...

  6. 【大数加法】POJ-1503、NYOJ-103

    1503:Integer Inquiry 总时间限制:  1000ms 内存限制:  65536kB 描述 One of the first users of BIT's new supercompu ...

  7. hdu_1041(Computer Transformation) 大数加法模板+找规律

    Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  8. Hat's Fibonacci(大数加法+直接暴力)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1250 hdu1250: Hat's Fibonacci Time Limit: 2000/1000 M ...

  9. ZZNU 2125:A + B 普拉斯(傻逼题+大数加法)

    2125: A + B 普拉斯 时间限制: 1 Sec  内存限制: 128 MB 提交: 94  解决: 28 [提交] [状态] [讨论版] [命题人:admin] 题目描述 "别人总说 ...

随机推荐

  1. springBoot(2) HelloWorld

    首先 下载一个 Spring Boot环境. 下载地址:https://spring.io/tools3/sts/all 打开STS.exe 一,新建项目 然后在空白处新建: 1.New→Other→ ...

  2. 基于weui loading插件封装

    <!-- Loading.vue --> <template> <div id="loadingToast" v-if="show" ...

  3. 《剑指offer》面试题26 复杂链表的复制 Java版

    (定义一个新的数据结构,每个节点除了具有普通链表的next域外,还有一个额外的引用指向任意节点.我们要对由该特殊数据结构形成的链表进行复制.) 我的方法:也就是克隆一个这种特殊链表,很快想到先不考虑原 ...

  4. uboot 主Makefile分析

    一. Makefile 配置 1.1. make xxx_config 1.1.1. 笔者实验时是make x210_sd_config a. x210_sd_config是Makefile下的一个目 ...

  5. glVertexAttribPointer 顶点数据解析方式

    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0); 第一个参数指定从索引0开始取数据,与顶点着色器中layout(location=0)对应. ...

  6. navicat和Pycharm的连接

    要安装好Mysql,并且实现了Mysql和Navicat的连接: 2.连接界面如下:点击连接,然后点击MySQL就可以看到如下界面 3. 然后就出现新建连接的设置,连接名自己起,用户名和密码和在MyS ...

  7. [LeetCode] 113. 路径总和 II

    题目链接 : https://leetcode-cn.com/problems/path-sum-ii/ 题目描述: 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径 ...

  8. django项目学习之QQ登录

    最近在用django框架写一个商城项目(前后端分离),里面用到的一些技术其他项目也可以借鉴,于是就想写一些博客记录,以防自己忘记,今天先写一个关于登录接口中引入QQ登录接口的流程. 关于QQ登录接口的 ...

  9. package.json的所有配置项及其用法,你都熟悉么

    写在前面 在前端开发中,npm已经是必不可少的工具了.使用npm,不可避免的就要和package.json打交道.平时package.json用得挺多,但是没有认真看过官方文档.本文结合npm官方文档 ...

  10. 看CLRS 对B树的浅显理解

    定义及特点: 每个结点有n个关键字和n+1个指向子结点的指针,即有n+1个孩子结点. n个关键字按非递减的顺序存储. 最小度数t>=2,除了根结点的所有内部结点(非叶结点)的孩子数>=t且 ...