首页 > 编程语言 >高精度算法总结

高精度算法总结

时间:2023-11-26 13:55:28浏览次数:31  
标签:总结 10 高精度 int back -- 算法 vector size

高精度加法

题目链接:

https://www.acwing.com/activity/content/problem/content/825/

代码模版:

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 // C = A + B
 7 vector<int> add(vector<int> &A, vector<int> &B)
 8 {
 9     vector<int> C;
10     
11     int t = 0;  // 进位
12     for (int i = 0; i < A.size() || i < B.size(); i++)
13     {
14         if (i < A.size()) t += A[i];
15         if (i < B.size()) t += B[i];
16         C.push_back(t % 10);
17         t /= 10;
18     }
19     
20     if (t) C.push_back(1);
21     return C;
22 }
23 
24 int main()
25 {
26     string a, b;
27     vector<int> A, B;
28     
29     cin >> a >> b;  // a = "123456"
30     for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');  // A = [6, 5, 4, 3, 2, 1]
31     for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');
32     
33     auto C = add(A, B);
34     
35     for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
36     return 0;
37 }
View Code

 

高精度减法

题目链接:

https://www.acwing.com/activity/content/problem/content/826/

代码模版:

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 // 判断是否有 A >= B
 7 bool cmp(vector<int> &A, vector<int> &B)
 8 {
 9     if (A.size() != B.size()) return A.size() > B.size();
10     for (int i = A.size() - 1; i >= 0; i--)
11         if (A[i] != B[i])
12             return A[i] > B[i];
13     return true;
14 }
15 
16 // C = A - B
17 vector<int> sub(vector<int> &A, vector<int> &B)
18 {
19     vector<int> C;
20     for (int i = 0, t = 0; i < A.size(); i++)
21     {
22         t = A[i] - t;
23         if (i < B.size()) t -= B[i];
24         C.push_back((t + 10) % 10);
25         if (t < 0) t = 1;
26         else t = 0;
27     }
28     
29     while (C.size() > 1 && C.back() == 0) C.pop_back();  // 去掉前导0
30     
31     return C;
32 }
33 
34 int main()
35 {
36     string a, b;
37     vector<int> A, B;
38     
39     cin >> a >> b;  // a = "123456"
40     for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');  // A = [6, 5, 4, 3, 2, 1]
41     for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');
42     
43     if (cmp(A, B))
44     {
45         auto C = sub(A, B);
46         
47         for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
48     }
49     else
50     {
51         auto C = sub(B, A);
52         
53         printf("-");
54         for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
55     }
56     return 0;
57 }
View Code

 

高精度乘法

题目链接:

https://www.acwing.com/problem/content/795/

代码模版:

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 // C = A * b
 7 vector<int> mul(vector<int> &A, int b)
 8 {
 9     vector<int> C;
10     
11     int t = 0;  // 进位
12     for (int i = 0; i < A.size() || t; i++)
13     {
14         if (i < A.size()) t += A[i] * b;
15         C.push_back(t % 10);
16         t /= 10;
17     }
18     
19     while (C.size() > 1 && !C.back()) C.pop_back();
20     
21     return C;
22 }
23 
24 int main()
25 {
26     string a;
27     int b;
28     vector<int> A;
29     
30     cin >> a >> b;
31     for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
32     
33     auto C = mul(A, b);
34     
35     for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
36     return 0;
37 }
View Code

 

高精度除法

题目链接:

https://www.acwing.com/problem/content/796/

代码模版:

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 // A / b,商是C,余数是r
 8 vector<int> div(vector<int> &A, int b, int &r)  // r是引用
 9 {
10     vector<int> C;  // 商
11     r = 0;
12     for (int i = A.size() - 1; i >= 0; i--)
13     {
14         r = r * 10 + A[i];
15         C.push_back(r / b);
16         r %= b;
17     }
18     
19     reverse(C.begin(), C.end());
20     while (C.size() > 1 && !C.back()) C.pop_back();
21     
22     return C;
23 }
24 
25 int main()
26 {
27     string a;
28     int b;
29     vector<int> A;
30     
31     cin >> a >> b;
32     for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
33     
34     int r;
35     auto C = div(A, b, r);
36     
37     for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
38     cout << endl << r << endl;
39     
40     return 0;
41 }
View Code

 

标签:总结,10,高精度,int,back,--,算法,vector,size
From: https://www.cnblogs.com/ykycode/p/17856904.html

相关文章

  • 今日总结
    石家庄铁道大学实验报告课程名称:云计算  班级:信2105-3 学号:20214005 姓名:赵悦恒实验2:Docker实验一、实验目的 1、了解Docker服务安装;2、掌握Docker镜像操作。二、实验内容1.Docker服务安装查看内核版本: 2.MySQL安装    2.2tomcat安装 ......
  • 20232413《网络》第三周学习总结
    教材学习内容总结教材学习中的问题和解决方案问题一:如何防范网络钓鱼攻击?解决方法:1.谨慎对待收到的电子邮件,特别是来自未知发件人的邮件2.验证网站的真实性,确保它们使用安全的连接3.不要在不安全的网站上输入个人敏感信息问题二:如何防范身份盗窃?解决方法:1.不要在公共场所......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第十一周学习总结 第十三章TCP/IP和网
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 2023-2024-1 20232327《网络空间安全导论》第三周学习总结
    2023-2024-120232327《网络空间安全导论》第三周学习总结教材学习内容总结1.安全攻击的类型:被动攻击和主动攻击;2.被动攻击:窃听攻击和流量分析;主动攻击伪装攻击、重放攻击、消息篡改、拒绝服务;3.X.800定义的五类安全服务:认证、访问控制、数据保密性、数据完整性、不可否认性;......
  • C/C++ 常用加密与解密算法
    计算机安全和数据隐私是现代应用程序设计中至关重要的方面。为了确保数据的机密性和完整性,常常需要使用加密和解密算法。C++是一种广泛使用的编程语言,提供了许多加密和解密算法的实现。本文将介绍一些在C++中常用的加密与解密算法,这其中包括Xor异或、BASE64、AES、MD5、SHA256、RS......
  • 2023-2024-1 20232308 《网络空间安全导论》第十二周学习总结
    教材学习内容总结思维导图学习过程中的问题:问题1:防火墙有什么局限性问题1解决方案:问题2:工业互联网属于第几次工业革命问题2解决方案:百度第四次基于AI的学习参考资料《网络空间安全导论》网络空间安全导论书单......
  • 2023-2024-1 20231324 《计算机基础与程序设计》第九周学习总结
    2023-2024-120231324《计算机基础与程序设计》第9周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13005这个作业的目标《计算......
  • 2023-2024-1 20231419 《计算机基础与程序设计》第九周学习总结
    2023-2024-120231419《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09这个作业的目标自学《计算机科学概......
  • 2023-2024-1 20232301 《网络》第3周学习总结
    教材学习内容总结教材学习中的问题和解决过程问题1:对于计算机病毒检测原理想要进一步了解,并想查看代码示例解决方案:询问chatgpt,其为我给出了详细的解答,并用Python代码为我演示了详细过程基于AI的学习......
  • 《2023-2024-1 20232415 《网络》第三周学习总结》
      在本周的网络空间安全导论的学习过程中,我以自学的形式展开了对网络安全基础的学习。在学习的过程中,我对网络安全的概念与应用有了大致的理解。 在学习的过程中,我遇到了一些问题:问题1:什么是缓冲器溢出缺陷?问题1解决方案:询问ChatGPT。        网络......