关于高精度除法

高精度除法 ​高精度除法计算原理 在读小学时,我们做除法都采用竖式方法计算。被除数从高位开始,和除数对齐,逐位“试商”,“试商”后除数减去“试商”的数的乘积,如下图所示 采用计算机做高精度除法时,模拟日常除法的步骤。但计算机不可能做“试商”,这时,我们可以采用减法来模拟。 阅读详情

输入m,n输出其商的整数部分。
思路1:用减法模拟除法,即用n去减m,一直减到不能再减为止。
结果:这种算法只利用了高精度减法,所以代码实现难度较低。但m远远大于n时(eg:9999÷3),运算时间过长。因此不可取。
思路2:模拟除法竖式
这种解法比较容易想到,也符合认知规律,重点在于解决2个问题:
1.如何进行某一位置的除法;
2.如何把上一次的余数加入这次的计算。
关于问题1,我们发现,此时的除法,除数与被除数位数相差不多(商不会超过9),因此可用减法来模拟。
while ( 比较得被除数>除数)
{减一次;商++;
}
关于问题2,我的解决方法是用 head和tail作为指针,划出被除数的范围。

模拟竖式

在某种意义上,把被除数m [ ] 当成了一个队列,队头为0时,队头向后推。除到不能再除时,队尾的后移一位。
为了表示方便,我们最好不要像平时做高精度一样,把个位记为m[1],十位记为m[2]……而是按照数字输入的顺序,最高位的为m[1],次高位为m[2]……
伪代码:
int head=1,tail 1=n[0] ; ans[0]=1
while (tail<=m[0])
{
while (比较被除数与n前者大)
{在head到tail的范围内减一次;更新head值;
ans [ans[0]]++
}
ans [0]++;tail++
}
输出ans
但这样做出来后,只能得5分,原因是:因为得数的前与后都有可能出现0,只需在循环外或输出前判断一下即可。如果输入的被除数小于除数,直接得0。

#include<iostream>
#include<cstring>
#include<cstdio>
char n1[101],m1[101];
int m[101],n[101],ans[101],head,tail;
using namespace std;

bool start(int a[],int b[])//-----------------------start
{
 if(a[0]>b[0]) return 1;
 if(a[0]<b[0]) return 0;
 if(a[0]==b[0])
  for(int i=1;i<=a[0];i++)
  {
    if(a[i]>b[i]) return 1;
    if(a[i]<b[i]) return 0;
  } 
 return 1;  
}
void in(char a1[],int a[])
{ 
 gets(a1);
 a[0]=strlen(a1);
 for(int i=0;i<a[0];i++)
 a[i+1]=a1[i]-48;       
}
void out(int ans[])//------------------------------------out
{
 int h=1;
 while(ans[h]==0) h++;  
 for(int i=h;i<=ans[0];i++)
  cout<<ans[i];     
}
bool cmp(int a[],int b[])//--------------------------------cmp
{
    if(tail-head+1>b[0]) return 1;
    if(tail-head+1<b[0]) return 0;
    if(tail-head+1==b[0])
    for(int i=0;i<b[0];i++)
    {
     if(a[head+i]>b[i+1]) return 1;
     if(a[head+i]<b[i+1]) return 0;     
    }
 return 1;      
}
void jian(int a[],int b[])//---------------------- 减一次 
{
 int i=0;
 while(i<b[0])
  {
   if(a[tail-i]<b[b[0]-i])
    {a[tail-i]+=10; a[tail-i-1]--;} 
   a[tail-i]-=b[b[0]-i]; 
   i++;
  }
   while(a[head]==0) head++;    
}
void work(int a[],int b[])//----------------------------work
{
 head=1; tail=b[0]; ans[0]=1;
while(tail<=a[0])//--------------------------从后往前 
 {
  while(cmp(a,b)==1)//----------------------减多次 
   {
    jian(a,b);
    ans[ans[0]]++;
   }
  ans[0]++;
  tail++;   
 }
 if(ans[ans[0]]==0) ans[0]--;
}
int main()//---------------------------------------main
{
 in(m1,m);
 in(n1,n);
 if (start(m,n)==0)
  {
   cout<<0;
   return 0;    
  }
 work(m,n);
 out(ans);
 return 0;  
}

优化:用分治算法,把被除数拆成几部分,分别除。

高精度算法【加减乘除】 高精度加减乘除算法的讲解 阅读详情

相关推荐

C语言高精度算法(加、减、乘、阶乘、高除以高,高除以低)

高精度算法

qq_65265649的博客 7585

【基础算法】高精度除法

用途 准确无误地得出两大数相除后地余数和商 除法核心1【高精度除以低精度】 算法核心:逐位试商法 ①从被除数的第一位开始,用此数除以除数,得出商和余数 ②用得出的余数与被除数的下一位数字结合继续除以除数,以此类推 代码实现 #include <bits/stdc++.h> using namespace std; const int num=1e5; char ca[num]; int a[num],b,c[num]; void demo(char n1[],int n

m0_54566774的博客 7603

[蓝桥杯训练]———高精度乘法、除法

在计算机科学中,高精度算法通常指的是处理超过计算机原生数据类型表示范围的数字的能力。例如,如果要处理非常大或非常小的整数或小数,可能需要使用高精度算法,因为标准的整数和浮点数类型的表示范围是有限的。通常存在两种1.大整数高精度2.浮点型高精度。

m0_74939592的博客 1919

【7. 高精度除法】

高精度除法

小呆鸟blog 1586

(C语言)高精度除法

题目描述 高精度除法:给定一个很大很大的数字,用它来除以一个 int 或 long 范围内的整数。  输入 输入包括多组测试数据。 对每组测试数据,在一行中给出一个整数N(0 输出 对每组输入数据, 在一行中输出 N 除以 d  的结果(N/d). 如果被除数 N 不为零,除数d为0 ,则输出"Inf" (不包含引号," 'Inf' refers to

YiMo_Fan的博客 6616

C++从入门到入土-高精度除法

PS:爱c++爱未来一、高精度除以低精度采取按位相除法。#include&lt;cstdio&gt; #include&lt;iostream&gt; using namespace std; const int maxn=1010; char a1[maxn],c1[maxn]; int a[maxn],c[maxn],x=0,b,lena,lenc,i; int main() { freop...

这只小熊长得可真东西 1万+

C++ 的高精度除法

为什么需要高精度计算 对于 C++ 而言,最大的数据为 long long(64b,8位),对于超过 8B 的数据,C++ 没有对应的数据类型进行表示。所以我们需要知道高精度计算。更详细的解释,可以参考这个网页https://blog.youkuaiyun.com/justidle/article/details/104414459。 高精度除法计算原理 在读小学时,我们做除法都采用竖式方法计算。被除数...

努力中的老周的专栏 1万+

ADS高级技巧:用DAC控件实现多变量参数扫描(以S参数和阻抗匹配为例)

本文深入解析了ADS软件中DAC控件的高级应用,指导用户如何利用其实现多变量参数扫描。通过构建支持多变量的MDF文件,并将其与原理图变量动态映射,可以高效完成如S参数和阻抗匹配等复杂场景的联合仿真与可视化分析,显著提升射频电路设计的效率和深度。

3a9bq4r8t2y的博客 253

高精度除法的实现

这是C++算法基础-基础算法专栏的第十篇文章,详细讲解了高精度除法的定义、过程、性质、代码实现等内容。

wyuchen123的博客 935

TCP协议中ARQ自动重传的三种实现方式对比(含SACK详解)

本文深入解析TCP协议中ARQ自动重传的三种实现方式,包括停止-等待、回退N步和选择重传协议,特别详细介绍了SACK机制的工作原理和优势。通过对比分析各协议的效率、复杂度和适用场景,为网络通信中的可靠性传输提供了实用的选型指南。

weixin_30776273的博客 462

Midas Civil实战避坑指南:从建模报错到施工阶段分析

本文详细解析了Midas Civil在桥梁建模与施工阶段分析中的实战避坑技巧,涵盖从基础建模到高级边界条件设置的全流程。针对截面定义、节点创建、施工荷载区分等常见问题提供专业解决方案,帮助工程师避免计算误差,提升结构分析效率。特别强调施工阶段荷载与恒荷载的正确处理,以及弹性连接的合理应用。

weixin_30319153的博客 349

高精度算法——高精度除法

高精度除法是最后一个高精度运算了,也就是你学完了这一节,以后碰到了要用高精度算法的题都可以做了,好了,其他的我就不多说了。

m0_62999279的博客 2328

Inside NAND Flash Memories.中文版. Chatper 2 [2.1-2.2.1]

2.1 Introduction 半导体存储器分类: RAM:Random Access Memories--掉电丢失 ROM:Read Only Memories--只读,出厂时写好;掉电不丢失;不可更改。 NVM:Non-Volatile Memories--电可擦除/写入,并且掉电不丢失。第一类产品为EPROM memory (Erasable Programmable Read...

xuqikang的专栏 3606

C语言——高精度除法

这里我们要实现大数除以小数,实际原理其实是模拟我们手算除法:与高精度加减乘法不同的是,高精度除法是从高位开始运算,一步一步运算到最低位的,所以不用将被除数字符串反转。

Stewie Lee的博客 3692

【RT-DETR多模态融合改进】| 自研 多模态大核选择模块:MM_LSK,适配多模态图像信息融合

本文记录的利用改进的多模态大核选择模块(MM-LSK)优化RT-DETR,构建可见光-红外双模态目标检测网络。在遥感等大尺寸图像的可见光-红外双模态小目标检测任务中,单模态检测易受光照、云雾、背景干扰等因素影响,且小目标外观信息匮乏,无法仅基于单模态外观实现较好的识别,因此需要融合双模态互补特性与广泛的跨模态上下文信息进行辅助。

Limiiiing的博客 381

【AUTOSAR-E2E】-1.4-详述E2E Transformer解决方案

共13页精讲 目录 1“Data Transformation”介绍 1.1 基于SOME/IP Transformer 1.2 基于COM Based Transformer 2 ComXf(COM Based Transformer)介绍 2.1 ComXf(COM Based Transformer)功能规范 2.2 ComXf(COM Based Transformer)提供的服务 2.3 配置注意事项 3 E2EXf(E2E Transformer)介绍 3.1 E2EX...

「汽车电子助手」的博客 4700

C++ 大整数运算 高精度除法

这篇文章主要是对于大整数类的设计过程中,如何实现并改进长除法(模拟竖式法)的一个总结。

weixin_44215992的博客 5047

多模型机器学习生存预测分析:AUC比较、生存分层与SHAP解释

本文研究了多种机器学习模型在心力衰竭患者生存预测中的应用。通过比较逻辑回归、随机森林、XGBoost、LightGBM和梯度提升机五种模型的AUC表现,选择最优预测模型。基于最优模型的预测概率对患者进行风险分层,并使用Kaplan-Meier生存分析和log-rank检验验证分层的有效性。最后采用SHAP方法解释模型决策过程,识别关键预测因素。研究提供了从模型构建、评估到解释的完整技术流程,为临床预后预测提供了可复现的分析框架。

AI的内部世界的博客 157

高精度乘、除法

A5 A4 A3 A2 A1 A0 × b ————————————————

weixin_60569662的博客 573

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

基础算法 —— 高精度计算 —— 高精度除法

【高精除以低精】 1.算法分析 做除法时,每一次的商的值都在0~9,每次求得的余数连接以后的若干位得到新的被除数,继续做除法。因此在做高精度除法时,要涉及到乘法运算和减法运算以及移位处理。 为程序简洁,可以避免高精度乘法,用0~9次循环减法取代得到商的值,对于高精度数除以低精度数,我们采用按位相除法。 2.模版 #include<iostream> #include<...

Alex_McAvoy的博客 8828

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

下一篇: 一个小练习
「已注销」
博客等级 码龄10年 2粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值