🌹作者:云小逸
📝个人主页: 云小逸的主页
📝Github: 云小逸的Github
🤟motto:要敢于一个人默默的面对自己, ==强大自己才是核心==。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟
👏专栏:C++👏 👏专栏:Java语言👏
👏专栏:C语言初阶👏👏专栏:数据结构👏
@TOC
前言
今天是备战蓝桥杯第三篇文章,这里主要写的是关于高精度的问题:高精度加法,高精度减法,高精度乘法,高精度减法。如有错误,请私信作者,十分感谢,望见谅!
——————————————————————————————
首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你
1.人生的路上,如果懂得体谅、宽容,日子就会很温馨、很安宁。人生路上,如果缺少体谅,不能理解,没有谦让,日子就会越过越烦恼。生活中的很多烦恼,就是源于我们不能体谅,过分在意了自己的主张,互不理解,互不相让,伤了彼此的心灵。生活,很多时候,就是一种体谅,一种理解。
2.人生的奋斗目标不要太大,认准了一件事情,投入兴趣与热情坚持去做,你就会成功。
3.人生在世不能失去的四样东西:坚韧的自制力,冷静的大脑,对生活的希望和相信自己的信心。
4.喜欢的人,总是靠伤害我来长大,最后拿成熟稳重去爱别的人,虽然感情就是前人栽树后人乘凉的道理,但是我教会你爱不是让你去爱别人的。
5生活从来不会刻意亏欠谁,它给了你一片阴影,必会在不远的地方撒下阳光。不要辜负了自己受过的苦难,这样善良又努力的一个你,一定会得到曾梦寐以求的所有美好!
高精度加法:
题目:
给定两个正整数(不含前导 0),计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35
习题解析:
**高精度问题一般是在C++中的,其他Java或者Python不需要考虑这个问题。
在这里我们将一个数字倒着存储,即个位放在a[0],画一个图便于理解:**
**这样做的原因:
因为在运算的过程中,我们经常会出现进位这个情况,而如果最大位数放在a[0],进位时头插,需要将数组整体移动一位,不大方便,因此将各位放在a[0],进位时直接尾插是很方便的哦!!!**
代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B)
{
vector<int> C;
int t=0;
for(int i=0;i<A.size()||i<B.size();i++)
{
if(i<A.size()) t+=A[i];
if(i<B.size()) t+=B[i];
C.push_back(t%10);
t/=10;
}
if(t) C.push_back(1);
return C;
}
int main()
{
string a,b;
vector<int> A,B;
cin>>a>>b;
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
auto C=add(A,B);
for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
return 0;
}
高精度减法:
题目:
给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1≤整数长度≤105
输入样例:
32
11
输出样例:
21
做法解析:
第一步:要先判断A,B谁大谁小
第二步:写出sub相减函数
第三步:去掉前置0,如003
代码:
// 给定两个正整数
#include <iostream>
#include <vector>
using namespace std;
bool cmp(vector<int>& A, vector<int> &B)
{
if(A.size() != B.size()) return A.size() > B.size(); //直接ruturn 了就不用else
for(int i = A.size(); i >= 0; i--)
if(A[i] != B[i])
return A[i] > B[i];
return true;
}
vector <int> sub(vector<int>& A, vector<int> &B)
{
vector<int> C;
int t = 0;
for(int i = 0; i < A.size(); i++)
{
t = A[i] - t;
if(i < B.size()) t -= B[i];
C.push_back((t + 10) % 10 ); // 合而为1
if(t < 0) t = 1;
else t = 0;
}
while(C.size() > 1 && C.back() == 0) C.pop_back(); //去掉前导0
return C;
}
int main()
{
string a ,b;
vector<int> A, B;
cin >> a >> b ;
for(int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
for(int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');
if (cmp(A,B))
{
auto C = sub(A, B);
for(int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
return 0;
}
else
{
auto C = sub(B, A);
printf("-");
for(int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
return 0;
}
}
最后
十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:
1.生活从来不会刻意亏欠谁,它给了你一片阴影,必会在不远的地方撒下阳光。不要辜负了自己受过的苦难,这样善良又努力的一个你,一定会得到曾梦寐以求的所有美好!
2.生活从来不会刻意亏欠谁,它给了你一片阴影,必会在不远的地方撒下阳光。不要辜负了自己受过的苦难,这样善良又努力的一个你,一定会得到曾梦寐以求的所有美好!
3.你的气质来源于你走过的路,读过的书,诗句是天才创造的,但是诗意却可以属于每一个追求真善美的灵魂。
4.我我始终相信读过的所有书都不会白读,它会在未来的某一个场合,帮助我变得更出色。
5.我始终相信读过的所有书都不会白读,它会在未来的某一个场合,帮助我变得更出色。
最后如果觉得我写的还不错,请不要忘记==点赞==✌,==收藏==✌,加==关注==✌哦(。・ω・。)
愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!