1168:大整数加法

1168:大整数加法
【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555

问题分析

  1. 为什么使用数组

    因为 int 的字节长度是4个字节,占32位,数值范围在 -32768~32767
    long long 的字节长度是8个字节,占64位,的数值范围 -2147483648~2147483647
    题目当中计算最高200位的数值运算使用 int 或 long long 已经不满足了
    所以我们采用数组,运用加法基本原理,逢十进一,来解决高精度加法计算问题
    我们以输入 123456789 + 5723169 为例

  2. 使用字符数组来接收
   char a[1000], b[1000];cin >> a >> b;或者char a[1000], b[1000];cin.getline(a, 1000);cin.getline(b, 1000);
字符数组 a
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] ...
1 2 3 4 5 6 7 8 9 ...
字符数组 b
b[0] b[1] b[2] b[3] b[4] b[5] b[6] ...
5 7 2 3 1 6 9 ...
  1. 把字符数组转换成整型数组
   // 字符数组 a 转换  注意字符数组与整型数组数值存放的位置(颠倒)int la[1000];memset(la, 0, sizeof(la));         // 初始化 la 数组,使之都为0int lena = strlen(a);              // 求实际输入字符数组 a 的长度for (int i = 0; i < lena; i++) {la[i] = a[lena - 1 - i] - '0'; // 数字字符转换成整型数字的时候,需要减字符'0',或者减48,参考阿斯克码表}// 字符数组 b 转换  同字符数组 a 的转换int lb[1000];memset(lb, 0, sizeof(lb));int lenb = strlen(b);for (int i = 0; i < lenb; i++) {lb[i] = b[lenb - 1 - i] - '0';}
转换后的整型数组 la
la[0] la[1] la[2] la[3] la[4] la[5] la[6] la[7] la[8] ...
9 8 7 6 5 4 3 2 1 ...
转换后的整型数组 lb
lb[0] lb[1] lb[2] lb[3] lb[4] lb[5] lb[6] ...
9 6 1 3 2 7 5 ...
整型数组 lc
lc[0] lc[1] lc[2] lc[3] lc[4] lc[5] lc[6] lc[7] lc[8] ...
...
  1. 运用加法原理进行计算(逢十进一)
    int lc[1010], lenc = 0;                // lc 表示计算的结果,lenc 表示结果有多少位memset(lc, 0, sizeof(lc));for (int i = 0; i < lena || i < lenb; i++) {lc[i + 1] = (la[i] + lb[i]) / 10;  // 进位lc[i] = (la[i] + lb[i]) % 10;      // 取个位lenc++;                            // 记录和的结果有多少位}
  1. 去掉最高位之前的零,输出整型数组 lc
    while (lc[lenc] == 0 && lenc >= 0) { lenc--;             // 去掉最高位之前的零}for (int i = lenc; i >= 0; i--) {cout << lc[i];      // 注意数字在数组中保存的位置 }

参考代码

#include <bits/stdc++.h>using namespace std;int main() {char a[1000], b[1000];cin.getline(a, 1000);cin.getline(b, 1000);int la[1000], lb[1000], lc[1010], lenc = 0;memset(la, 0, sizeof(la));memset(lb, 0, sizeof(lb));memset(lc, 0, sizeof(lc));int lena = strlen(a),lenb = strlen(b);for (int i = 0; i < lena; i++) {la[i] = a[lena - 1 - i] - '0';}for (int i = 0; i < lenb; i++) {lb[i] = b[lenb - 1 - i] - '0';}for (int i = 0; i < lena || i < lenb; i++) {lc[i + 1] = (la[i] + lb[i] + lc[i]) / 10;lc[i] = (la[i] + lb[i] + lc[i]) % 10;lenc++;}while (lc[lenc] == 0 && lenc >= 0) {lenc--;}for (int i = lenc; i >= 0; i--) {cout << lc[i];}cout << endl;return 0;
}

大整数加法【信息学奥赛一本通-1168】相关推荐

  1. 信息学奥赛一本通 1168:大整数加法 | OpenJudge NOI 1.6 10:大整数加法

    [题目链接] ybt 1168:大整数加法 OpenJudge NOI 1.6 10:大整数加法 [题目考点] 1. 高精度 考察:高精加高精 高精度计算讲解 [解题思路] 注意:输入可能有多余的前导 ...

  2. 最小新整数(信息学奥赛一本通-T1231)

    [题目描述] 给定一个十进制正整数n(0<n<1000000000),每个数位上数字均不为0.n的位数为m. 现在从m位中删除k位(0<k<m),求生成的新整数最小为多少? 例 ...

  3. 输出第二个整数(信息学奥赛一本通-T1002)

    [题目描述] 输入三个整数,整数之间由一个空格分隔,整数是32位有符号整数.把第二个输入的整数输出. [输入] 只有一行,共三个整数,整数之间由一个空格分隔.整数是32位有符号整数. [输出] 只有一 ...

  4. 1.6编程基础之一维数组 10大整数加法

    1.6编程基础之一维数组 10大整数加法 OpenJudge - 10:大整数加法 1168:大整数加法 信息学奥赛一本通(C++版)在线评测系统 P1601 A+B Problem(高精) A+B ...

  5. 信息学奥赛一本通:1168:大整数加法

    1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 76804     通过数: 25726 [题目描述] 求两个不超过200位的非负整数的和. ...

  6. 信息学奥赛一本通(1168:大整数加法)

    1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 44610     通过数: 14295 [题目描述] 求两个不超过200位的非负整数的和. ...

  7. 信息学奥赛一本通(c++):1168:大整数加法

    一.题目 1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 求两个不超过200位的非负整数的和. [输入] 有两行,每行是一个不超过200位 ...

  8. 信息学奥赛一本通(c++):1124:矩阵加法

    信息学奥赛一本通(c++):1124:矩阵加法 一.题目 1124:矩阵加法 时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 输入两个n行m列的矩阵A和B,输出 ...

  9. 1168:大整数加法--2022.01.22 AC

    /* 1168:大整数加法--2022.01.22 AC http://ybt.ssoier.cn:8088/problem_show.php?pid=1168c++中 cin.cin.get().c ...

最新文章

  1. Anytime项目开发记录0
  2. 团队-石头,剪刀,布-设计文档
  3. Android应用坐标系统全面详解
  4. java不要无限循环_java – 看似无限循环终止,除非使用System.out.println
  5. am335x linux修改ip,Linux 修改代码以支持LED 控制(board-am335xevm)
  6. castle典范英语 storm_典范英语
  7. 钉钉机器人智能提醒_利用钉钉机器人和语雀提高协同办公效率
  8. label confusion learning to enhance text classification models
  9. windows操作系统服务器 网卡速度关联项
  10. CSDN-JayChou测试
  11. [IOS初学]ios 第一篇 storyboard 与viewcontroller的关系 - Zoe_J
  12. 3 求最大公约数和最小公倍数
  13. Android中画布连线的连线动画的实现
  14. 二维码支付的优势与劣势
  15. 深圳大学计算机刘霖,深圳大学传播学院
  16. LINUX暂停、挂起进程,开启进程
  17. nltk安装,语料库nltk下载
  18. tcp协议的三次握手
  19. python在生物学的应用_Python生物学Cookbook - Bioinformatics with Python 2nd
  20. Web简单快捷的指纹识别小工具_在线指纹识别平台设计

热门文章

  1. pywt?PyWavelets?
  2. echarts趋势线
  3. 思迅食通天6单店升级连锁流程
  4. 微软CRM,路在何方?
  5. LoadLibrary方法加载运行DLL库
  6. 【LaTeX】论文初稿模板
  7. INTEL CPU型号详解分类:电脑硬件
  8. Matlab 线性规划练习题
  9. SEO学习心得:分享总结学习SEO的心得
  10. 服务器的租用与托管,区别在哪里?