c语言高精度算法(加法)
1.为什么使用高精度算法啊?
在c语言中,int类型取值范围为(-2^31 ~ 2^31-1),而long long类型取值范围也才仅有(-2^63~ 2^63-1),在处理一些较大的数据时,显然仅靠这些类型,是完全无法处理的
2.高精度加法的核心思想(图解)
3.高精度算法的核心思想
其实就是用数组来处理高精度问题
将很大的数字用字符数组存储,再将其中一个个的数字变为整数存入整形数组中
4.准备工作
1.要输入东西
int main()
{char s1[3000], s2[3000];scanf("%s%s", s1, s2);int a[3000], b[3000], c[3000];//a来装s1,b来装s2,c来求和memset(a, 0, sizeof(a));//将数组清零memset(b, 0, sizeof(b));memset(c, 0, sizeof(c));return 0;
}
2.开始转化数字
int l1 = strlen(s1);int l2 = strlen(s2);int i, j;for (i = 0, j = l1 - 1; i < l1; i++, j--){a[i] = s1[j] - '0';}for (i = 0, j = l2 - 1; i < l2; i++, j--){b[i] = s2[j] - '0';}//注意这里我们要逆着放入输入的数,原因是便于我们后续处理,个人认为没啥特别的,也不需要特别理解
5.核心代码
开始转化了哦!!!
int len = 0;if (l1 > l2){len = l1;}else{len = l2;}for (i = 0; i < len; i++){c[i] = a[i] + b[i];}for (i = 0; i < len; i++){if (c[i] >= 10){c[i + 1] += c[i] / 10;c[i] %= 10;}}//就是我上面那张图解,实际上可以做的更好,但为了便于理解我将这块分成了两部分
6.最后工作
i = 2999;while (c[i] == 0 && i > 0)//去零,就low点把实际上还有好的办法,但理解第一{i--;}for (j = i; j >= 0; j--)//逆着输出这不就对上了吗{printf("%d", c[j]);}
7.最终代码
#include <stdio.h>
#include <string.h>
int main()
{char s1[3000], s2[3000];scanf("%s%s", s1, s2);int a[3000], b[3000], c[3000];memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(c, 0, sizeof(c));int l1 = strlen(s1);int l2 = strlen(s2);int i, j;for (i = 0, j = l1 - 1; i < l1; i++, j--){a[i] = s1[j] - '0';}for (i = 0, j = l2 - 1; i < l2; i++, j--){b[i] = s2[j] - '0';}int len = 0;if (l1 > l2){len = l1;}else{len = l2;}for (i = 0; i < len; i++){c[i] = a[i] + b[i];}for (i = 0; i < len; i++){if (c[i] >= 10){c[i + 1] += c[i] / 10;c[i] %= 10;}}i = 2999;while (c[i] == 0 && i > 0){i--;}for (j = i; j >= 0; j--){printf("%d", c[j]);}return 0;
}
8.结果展示
2341245213543654576547567
2314231535464575675686788
4655476749008230252234355
D:\vs2019 c\算法分析\Debug\main.c.exe (进程 6968)已退出,代码为 0。
按任意键关闭此窗口. . .
总结
算法魅力无穷,本人水平有限,只能至此。愿与诸君共同进步,奔向美好未来
c语言高精度算法(加法)相关推荐
- c语言高精度算法阶乘_任意位数的高精度阶乘算法 C语言版
文章作者:姜南(Slyar)文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. 今天就研究这个"任意位数的高精度阶乘算法"了,通过和大三的一个学 ...
- 语言高精度算法阶乘_JavaScript中的算法(附10道面试常见算法题解决方法和思路)...
https://juejin.im/post/6844903811505455118 Introduction 面试过程通常从最初的电话面试开始,然后是现场面试,检查编程技能和文化契合度.几乎毫无例外 ...
- c语言高精度算法阶乘_学了这么久的C语言,原来可以这样解决算法问题...
C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的.更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础. ...
- 高精度阶乘和 高精度算法(c语言)
以前刷oj的时候 遇见一个题目 也就是输入一个数字 判断阶乘和 用高精度计算出S=1!+2!+3!+-+N!(N≤50),其中"!"表示阶乘, 例如:5!=5*4*3*2*1.输入 ...
- 【基础】(C语言)高精度算法
文章目录 前言:为什么我们需要高精度算法? 一.高精度算法基础 二.高精度乘法 1.计算流程 2.完整代码 三.总结 前言:为什么我们需要高精度算法? 多数时候我们需要进行非常庞大的数字运算,其中涉及 ...
- 高精度算法(加减乘除取模(均可以处理负数))
高精度算法 前言 大数加法 不可以处理负数的模板 可以处理负数 大数减法 两个数都是整数,且相减结果大于0 两个数都是正整数,相减结果可以是负数 两个数均可以是负数 高精度乘法 两个数均可以是负数 大 ...
- 高精度算法——高精度减法
介绍: 高精度减法也同加法一样,也是用于位数太大的运算,给你一个十几位的数你可能会做直接开个long long 的数据类型就解决了,但是给你一个100位的呢,1000位的呢,开long long 也不 ...
- C语言常用算法源代码
原文地址:C语言常用算法源代码 作者:xuzengshuai 一.计数.求和.求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值.终值或结束条件,更要注意用来表示计数.和.阶乘的 ...
- A.pro读算法の2:高精度算法
1.1 描述 高精度算法,属于处理大数字的数学计算方法.在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字.一般这类数字我们统称为高精度数,高精度算法是用计算机对于 ...
最新文章
- HTML5 Audio标签方法和函数API介绍
- mac搭建php审计环境,[php审计实战篇]Simple-Log v1.6 安装逻辑问题
- 如何更改github工程的语言属性
- BM惊爆:EOS一周年工作KPI
- WINDOW下,node.js的安装
- CF1479C Continuous City
- python中的set方法_Python中set与frozenset方法和区别详解
- mysql function_Koa2 amp; mySQL amp; PM2 搭建后端服务
- StorAge存储库
- nodejs/pomelo 使用 mongodb 连接 mongo时 出现
- python 数组学习
- 惠普台式电脑引导不了系统_惠普电脑进入bios设置引导模式操作步骤图文
- 计算机c盘装什么,电脑只有一个C盘!怎么为电脑重装系统?
- 杭电数字电路课程设计——出租车计费器
- 让我摘下星星送给你_去最美的地方,我摘下星星给你。
- Unity3D Delegate
- java 中常用英语_java中常用英语
- 遥感图像去雾文章解读
- 光纤收发器tx和rx,光纤收发器单模和多模的区别!
- 快慢指针 ——链表 | Leetcode 练习
热门文章
- 网站seo优化推广方式有哪些?如何提高网站排名?
- T400 Windows7下面迅盘的启用
- PDF解密PDFPasswordRemover
- 哪里能找到搞笑自媒体素材?学会技巧才能提高创作效率
- c语言trim函数去除全部空格,Excel Trim函数使用方法,含用三个去空格函数都删不了的空格实例...
- 项目管理软件之争,禅道和JIRA大对比
- 【改】[火光摇曳]神奇的伽玛函数(上)——markdown排版
- java属于高级语言_一文告诉你java是高级语言吗?
- 51单片机(八).单片机的I2C与串口通讯
- 浏览器中实现3D全景浏览