当前位置: 首页 > wzjs >正文

网站的建设目标是什么意思国内外十大免费crm软件推荐

网站的建设目标是什么意思,国内外十大免费crm软件推荐,商圈外卖网站怎么做,北京网站建设w亿玛酷1订制高精度算法解析与实现 在计算机科学中,高精度运算是指超出普通数据类型(如int或long long)所能表示的数值范围的计算。这些计算涉及到处理非常大的整数或浮点数,常见的应用场景包括大数加减乘除、密码学、科学计算等。在这篇博客…

高精度算法解析与实现

在计算机科学中,高精度运算是指超出普通数据类型(如int或long long)所能表示的数值范围的计算。这些计算涉及到处理非常大的整数或浮点数,常见的应用场景包括大数加减乘除、密码学、科学计算等。在这篇博客中,我们将学习几种常见的高精度算法,并通过具体代码实现其功能,涵盖高精度加法、减法、乘法和除法。

高精度加法

高精度加法算法用于计算两个非常大的整数的和。我们需要使用数组模拟每一位数字的存储。在加法过程中,我们从低位开始逐位相加,同时处理进位。

题目来源:

  • P1601 A+B Problem(高精) - 洛谷
代码实现:高精度加法
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10; // 定义数组最大大小
int a[N], b[N], c[N];    // a, b 为输入的大数,c 存储结果
int la, lb, lc;          // la, lb 是输入数字的长度,lc 是结果的长度
string s1, s2;           // 输入的两个大数void add(int a[], int b[], int c[]) {for (int i = 0; i < lc; i++) {c[i] += a[i] + b[i];  // 相加每一位c[i + 1] = c[i] / 10; // 处理进位c[i] %= 10;            // 保证当前位只保留个位数}if (c[lc]) lc++;  // 如果最后一位有进位,结果长度加1
}int main() {cin >> s1 >> s2;  // 输入两个大数la = s1.size(), lb = s2.size(), lc = max(la, lb);  // 计算最大长度// 将输入字符串转换为数组,每个元素存储大数的每一位for (int i = 0; i < la; i++) a[i] = s1[la - 1 - i] - '0';for (int i = 0; i < lb; i++) b[i] = s2[lb - 1 - i] - '0';add(a, b, c);  // 执行加法运算// 输出结果for (int i = lc - 1; i >= 0; i--) cout << c[i];return 0;
}
思路解析
  • 数组存储:通过数组来存储每一位数字,逆序存储是为了方便从低位(个位)开始计算。
  • 进位处理:每次加法操作后,需要处理进位。我们将进位存储到下一位,并确保当前位仅包含个位数。
  • 最终结果:如果加法运算后有多余的进位,就需要扩展结果的位数。

高精度减法

高精度减法的过程与高精度加法相似,不同的是减法可能会涉及到借位的问题。因此,在减法操作时,我们需要处理负数结果以及借位。

题目来源:

  • P2142 高精度减法 - 洛谷
代码实现:高精度减法
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
string s1, s2;
int a[N], b[N], c[N];
int la, lb, lc;bool cmp(string &s1, string &s2) {if (s1.size() != s2.size()) return s1.size() < s2.size();  // 比较字符串长度else return s1 < s2;  // 如果长度相等,按字典序比较
}void sub(int a[], int b[], int c[]) {for (int i = 0; i < lc; i++) {c[i] += a[i] - b[i];  // 减法操作if (c[i] < 0) {  // 如果当前位小于0,进行借位处理c[i + 1] -= 1;c[i] += 10;}}while (lc > 1 && c[lc - 1] == 0) lc--;  // 去掉结果前面无用的零
}int main() {cin >> s1 >> s2;if (cmp(s1, s2)) { swap(s1, s2); cout << "-";  // 如果 s1 < s2,输出负号}la = s1.size(), lb = s2.size(), lc = max(la, lb);for (int i = 0; i < la; i++) a[i] = (s1[la - 1 - i] - '0');for (int i = 0; i < lb; i++) b[i] = (s2[lb - 1 - i] - '0');sub(a, b, c);  // 执行减法运算for (int i = lc - 1; i >= 0; i--) cout << c[i];return 0;
}
思路解析
  • 大小比较:首先比较两个大数的大小,如果第一个数小于第二个数,则交换两者,并在结果前加上负号。
  • 借位处理:如果当前位结果为负,进行借位。借位的处理类似于手工减法中的借位操作。
  • 输出:减法结果去掉前导零,输出最终的差值。

高精度乘法

高精度乘法涉及到两个大数相乘,我们可以采用逐位相乘的方式,类似于小学时的竖式乘法。

题目来源:

  • P1303 A*B Problem - 洛谷
代码实现:高精度乘法
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int a[N], b[N], c[N];
string s1, s2;
int la, lb, lc;void mul(int a[], int b[], int c[]) {for (int i = 0; i < lc; i++) {for (int j = 0; j < lc; j++) {c[i + j] += a[i] * b[j];  // 对应位相乘}}for (int i = 0; i < lc; i++) {c[i + 1] += c[i] / 10;  // 处理进位c[i] %= 10;}while (lc > 1 && c[lc - 1] == 0) lc--;  // 去掉结果前面无用的零
}int main() {cin >> s1 >> s2;la = s1.size(), lb = s2.size();lc = la + lb;  // 结果的最大长度为两个数的长度之和for (int i = 0; i < la; i++) a[i] = s1[la - 1 - i] - '0';for (int i = 0; i < lb; i++) b[i] = s2[lb - 1 - i] - '0';mul(a, b, c);  // 执行乘法运算for (int i = lc - 1; i >= 0; i--) cout << c[i];return 0;
}
思路解析
  • 逐位相乘:类似竖式乘法,从低位开始逐位相乘,并将乘积累加到结果数组的相应位置。
  • 进位处理:对于每一位的计算结果,处理进位,将个位数存储在当前位,十位数进到下一位。
  • 结果输出:最后去掉前导零,输出最终结果。

高精度除法

高精度除法是高精度算法中的一个难点,尤其是处理商和余数的计算。与高精度乘法相似,我们也需要逐位处理每一位的除法。

题目来源:

  • P1480 A/B Problem - 洛谷
代码实现:高精度除法
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int a[N], b, c[N];
string s1;
int la, lc;void div(int a[], int b, int c[]) {  // 高精度除法long long t = 0;for (int i = la - 1; i >= 0; i--) {t = t * 10 + a[i];  // 将当前位与之前的部分合成一个大数c[i] = t / b;  // 除以 b 得到商t %= b;        // 更新余数}while (lc > 1 && c[lc - 1] == 0) lc--;  // 去掉结果前面的零
}int main() {cin >> s1 >> b;la = s1.size(), lc = la;for (int i = 0; i < la; i++) a[i] = s1[la - i - 1] - '0';div(a, b, c);  // 执行除法运算for (int i = lc - 1; i >= 0; i--) cout << c[i];return 0;
}
思路解析
  • 构建大数:通过将每一位的数字合成一个大的数,逐步进行除法。
  • 商与余数:每次除法操作获取商,并更新余数。商的每一位对应着结果数组的一个位置。
  • 结果输出:去掉前导零,输出商的结果。

总结

高精度算法的核心在于如何用数组存储大数的每一位,并逐位进行加、减、乘、除等操作。在实现过程中,关键步骤包括进位处理、借位处理和结果的去零等。通过这些方法,我们可以处理远超标准数据类型范围的大数计算。

希望这篇博客能帮助你理解高精度算法的基本原理,并通过代码实现加深对这一主题的理解。在这里插入图片描述

http://www.dtcms.com/wzjs/98751.html

相关文章:

  • 手机微网站开发宁波seo搜索优化费用
  • 北京免费建站网络营销推广策略及推广方式
  • 网站后台上传文字图片百度站长之家工具
  • 建设联结是不是正规网站上海做推广的引流公司
  • 女装商城网站建设百度浏览器下载官方免费
  • 长沙网站建设有哪些百度推广网站
  • 哪个网站可以领手工回家做杭州seo服务公司
  • 网络测试seo软件排行榜前十名
  • 最为典型的跨境b2b电子商务平台武汉排名seo公司
  • 网站怎么做按钮seo排名资源
  • 公司网站开发款记什么科目深圳百度seo怎么做
  • 什么网站做谷歌联盟好aso如何优化
  • 做网站需要ftp吗新开网站
  • css字体颜色天津放心站内优化seo
  • 网上怎么开自己的网店呀信息流优化师是什么
  • 蒲城做网站石家庄关键词快速排名
  • 解析域名网站免费建立个人网站申请
  • 合作网站制作全国疫情高峰感染高峰进度
  • 建设领域行政处罚查询网站企业宣传片制作
  • 傻瓜网站开发软件怎样建网站平台
  • 杭州企业网站设计市场推广策略 包括哪些
  • 仿 手机 网站模板html源码下载建站工具有哪些
  • 济南章丘网站建设淘宝关键词查询工具哪个好
  • 设计网站酷学技术包分配的培训机构
  • 2023年网购平台排行榜百度seo快速见效方法
  • 贵阳哪家网站做优化排名最好pc网站建设和推广
  • 政府职能网站建设制作自己的网站
  • 深圳网页设计与制作本科工资多少钱seo视频教程
  • 国网公司网站郑州seo推广外包
  • 培训班线上优化seo优化培训课程