版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C++高精度算法的使用场景详解目录描述1.高精度加法1.思路2.代码2.高精度减法1.思路2.代码3.如果出现被减数的位数小于减数时呢
描述
如果要计算的数超过了longlong怎么解决使用高精度加减乘除,简单理解就是很大的数进行加减乘除。
1.高精度加法
1.思路
创建对应的数组变量及其他变量输入字符串将读入的数据转化为整数类型,并逆序(反转)存储到数组中将两个数组做累加(注意进位)判断最高位是否为0,大于0代表进位了,则让长度加1倒序输出
2.代码
#includebits/stdc++.h
usingnamespacestd;
inta[510],b[510],c[510];//a:被加数b:加数c:和
intmain(){
//1.输入字符串
stringstr1,str2;
cinstr1str2;
//2."1,2,3,4"转换为{1,2,3,4},并且反转{4,3,2,1}
for(inti=0;istr1.size();i++)
a[str1.size()-1-i]=str1[i]-'0';
for(inti=0;istr2.size();i++)
b[str2.size()-1-i]=str2[i]-'0';
//3.找两个字符串最大的个数,目的是为了将每一位计算完
intans=max(str1.size(),str2.size());
//4.相加(a+b)
for(inti=0;ians;i++){//遍历至最大长度,避免有的数字没计算
c[i]+=a[i]+b[i];//相加
c[i+1]=c[i]/10;//进位
c[i]%=10;//将加的结果求余10得出第i位
//4.如果结果数组第ans位的数大于0(大于0代表进位了),则让长度增加1
while(c[ans]0)ans++;
//5.倒序输出
for(inti=ans-1;ii--)
coutc[i];
return0;
}
#includebits/stdc++.h
usingnamespacestd;
inta[500],b[500],c[501],ans[501],len_a,len_b,len_ans;//a:加数1b:加数2c:进位数组ans:结果数组
intmain(){
//1.输入字符串
stringstr1,str2;
cinstr1str2;
len_a=str1.length();
len_b=str2.length();
//2."1,2,3,4"转换为{1,2,3,4},并且反转{4,3,2,1}
for(inti=0;istr1.size();i++)
a[str1.size()-1-i]=str1[i]-'0';
for(inti=0;istr2.size();i++)
b[str2.size()-1-i]=str2[i]-'0';
//3.找两个字符串最大的个数,目的是为了将每一位计算完
len_ans=max(len_a,len_b);
//4.相加(a+b)
for(inti=0;i=len_ans;i++){
ans[i]=a[i]+b[i]+c[i];//结果数组=(等于)被加数加上加数加上进位的数
if(ans[i]9){//如果结果数组大于9,则进位
c[i+1]=ans[i]/10;//给进位数组赋值
ans[i]%=10;//让结果数组大于9的数求余10,变成个位数
//5.如果结果数组len_ans位的数大于0,则让长度增加1
while(ans[len_ans]0)len_ans++;
//6.倒叙输出
for(inti=len_ans-1;ii--)coutans[i];
return0;
}
2.高精度减法
1.思路
定义被减数a,减数b,结果c数组输入被减数和减数,并且将数据倒叙存入数组中。找两个字符串最大的个数,目的是为了将每一位计算完将两个数组做相减(遍历至最大长度,避免有的数字没计算)。去掉前导0。例如结果为:089,不需要0循环遍历输出
2.代码
#includebits/stdc++.h
usingnamespacestd;
inta[510],b[510],c[510];//a:被减数b:减数c:结果
intmain(){
//1.输入字符串
stringstr1,str2;
cinstr1str2;
//2."1,2,3,4"转换为{1,2,3,4},并且反转{4,3,2,1}
for(inti=0;istr1.size();i++)
a[str1.size()-1-i]=str1[i]-'0';
for(inti=0;istr2.size();i++)
b[str2.size()-1-i]=str2[i]-'0';
//3.找两个字符串最大的个数,目的是为了将每一位计算完
intans=max(str1.size(),str2.size());
//4.相减(a-b)
for(inti=0;ians;i++){//遍历至最大长度,避免有的数字没计算
if(a[i]b[i]){
a[i+1]-=1;//向前借一位
a[i]+=10;//借一位以后加10
c[i]=a[i]-b[i];
//5.如去掉前导0。例如结果为:089,不需要0
while(c[ans-1]==0ans1)ans--;
//6.倒序输出
for(inti=ans-1;ii--)
coutc[i];
return0;
}
#includebits/stdc++.h
usingnamespacestd;
inta[500],b[500],c[501],ans[501],len_a,len_b,len_ans;//a:被减数b:减数c:进位ans:结果
intmain(){
//1.输入字符串
stringstr1,str2;
cinstr1str2;
len_a=str1.length();
len_b=str2.length();
//2."1,2,3,4"转换为{1,2,3,4},并且反转{4,3,2,1}
for(inti=0;istr1.size();i++)
a[str1.size()-1-i]=str1[i]-'0';
for(inti=0;istr2.size();i++)
b[str2.size()-1-i]=str2[i]-'0';
//3.找两个字符串最大的个数,目的是为了将每一位计算完
len_ans=max(len_a,len_b);
//4.相减(a-b)
for(inti=0;i=len_ans;i++){
ans[i]=a[i]-b[i]-c[i];//结果数组=(等于)被减数减去减数减去进位的数
if(ans[i]0){//如果结果数组小于0,则借位
ans[i]+=10;//借1位,加上10
c[i+1]++;//进位数组加1
//5.如去掉前导0。例如结果为:089,不需要0
while(len_ans1ans[len_ans-1]==0)len_ans--;
//6.倒序输出
for(inti=len_ans-1;ii--)coutans[i];
return0;
}
3.如果出现被减数的位数小于减数时呢
#includebits/stdc++.h
usingnamespacestd;
inta[510],b[510],c[510];//a:被减数b:减数c:结果
intflag=0;
intmain(){
//1.输入字符串
stringstr1,str2;
cinstr1str2;
//2.str1.size()str2.size()或者两个数一样长并且被减数的数值小于减数时,才需要交换两数位置
if(str1.size()str2.size()||str1.size()==str2.size()str1str2){
stringt=str1;
str1=str2;
str2=t;
flag=1;
//3."1,2,3,4"转换为{1,2,3,4},并且反转{4,3,2,1}
for(inti=0;istr1.size();i++)
a[str1.size()-1-i]=str1[i]-'0';
for(inti=0;istr2.size();i++)
b[str2.size()-1-i]=str2[i]-'0';
//4.找两个字符串最大的个数,目的是为了将每一位计算完
intans=max(str1.size(),str2.size());
//5.相减(a-b)
for(inti=0;ians;i++){//遍历至最大长度,避免有的数字没计算
if(a[i]b[i]){
a[i+1]
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江苏南京大学SZXZ2026-009生物医学工程学院科研人员招聘备考题库附参考答案详解(巩固)
- 2026浙江丽水市松阳县事业单位招聘39人备考题库【必刷】附答案详解
- 中国市政中南院2026届春季校园招聘备考题库附答案详解(a卷)
- 2026广东汕尾市城区消防救援大队招聘政府专职消防员4人备考题库带答案详解(满分必刷)
- 2026湖南长沙市第一医院自主招聘备考题库附参考答案详解(b卷)
- 2026湖北黄冈罗田县教育系统面向国内普通高校招聘教师41人备考题库及参考答案详解一套
- 2026云南昆明市卫生健康委员会“梦想不远昆明首选”全国引才活动后备人才招聘114人考试参考试题及答案解析
- 2026陕西西咸新区人力资源服务中心就业见习人员招聘4人考试备考试题及答案解析
- 2026年宿州市新汴河景区旅游发展有限责任公司招聘就业见习人员考试参考试题及答案解析
- 2026海南水发农业旅游发展有限公司招聘6人考试参考题库及答案解析
- 住院医师大课-糖尿病病人的麻醉-罗贞
- LY/T 3263-2021澳洲坚果栽培技术规程
- HY/T 107-2017卷式反渗透膜元件测试方法
- GB/T 39997-2021加油站埋地用热塑性塑料复合管道系统
- GB/T 1412-2005球墨铸铁用生铁
- 创新型城市建设的工作思路课件
- 公司法课件培训讲义
- 《颜氏家训》课件
- EHS有感领导(培训)
- 项目管理教案完整版
- 抗感染治疗药物教学课件
评论
0/150
提交评论