高精度之高精度除法(高精除以低精)

2024-03-09 18:32

本文主要是介绍高精度之高精度除法(高精除以低精),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.整除版高精度除法:
思路,手动模拟除法过程,包括余数用X记录,每次读到新位计算出被除数,然后计算。

//高精度除法 整除版 
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<vector>
#include<iterator>
using namespace std;
string a;
int b,x=0;
vector<int>p;
int main()
{cin>>a>>b;cout<<"b:"<<b<<endl;int len=a.size();
//  cout<<"len:"<<len<<endl;for(int i=0;i<len;i++){int aim=a[i]-'0';p.push_back((aim+x*10)/b);
//      cout<<* (p.end()-1)<<endl;x=((aim+x*10)%b);cout<<"x:"<<x<<endl;}vector<int>::iterator iter=p.begin();while( *iter==0 )++iter;copy(iter,p.end(),ostream_iterator<int>(cout));return 0;
}

二.小数版高精度除以低精度

//高精度除法 浮点数版 
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<vector>
#include<iterator>
#define MAXN 1000//MAXN是计算出的总位数 
using namespace std;
string a;
int b,x=0;
vector<int>p(1);
int main()
{cin>>a>>b;
//  cout<<"a:"<<a<<endl; p.reserve(1001);int len=a.size();cout<<"len:"<<len<<endl;for(int i=0;i<=MAXN;i++){if(i==len+1) p[0]=i;//小数点位置,应该先输出小数 int aim=(i<len)?(a[i]-'0'):0;cout<<"aim:"<<aim<<endl;p.push_back((aim+x*10)/b);x=((aim+x*10)%b);cout<<"x:"<<x<<endl;if(x==0)break; //如果除尽了就跳出 }int i=1,end=p.size()-1;cout<<"end:"<<end<<endl;while(!p[end]) end--;//消去末尾无效元素 if(end<p[0]) end=p[0]-1;//防止出现X00000将末尾的0消去了 while(!p[i]) i++;//消去开始无效元素 if(i>=p[0]) cout<<'0',i=p[0];//防止出现0.00000000000X将前的0消去 for(;i<=end;i++){if(i==p[0]) {cout<<'.'<<p[i];continue;}cout<<p[i];}return 0;
}

这篇关于高精度之高精度除法(高精除以低精)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/791581

相关文章

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

高精度打表-Factoring Large Numbers

求斐波那契数,不打表的话会超时,打表的话普通的高精度开不出来那么大的数组,不如一个int存8位,特殊处理一下,具体看代码 #include<stdio.h>#include<string.h>#define MAX_SIZE 5005#define LEN 150#define to 100000000/*一个int存8位*/int num[MAX_SIZE][LEN];void

高精度计算----减法运算(浮点型)

基于上一贴,修改减法运算适合于高精度浮点型计算。 因为减法比加法难度大一点,考虑的地方也要多一些,可能代码有欠缺,欢迎指出。 运算说明: 1、相减函数依旧没改变,包括上一贴的判断被减数与减数的大小函数也没变。 2、增加两个函数,取小数位数函数和结果处理(回归小数点)函数 3、与加法浮点高精度运算相比,这里改变较多的是结果处理函数,加法加完后,位数不减反增,而且最多增一位。减法会消失掉好多

高精度计算----减法运算

处理大数减法运算: 1、首先要判断被减数与减数哪个更大,再相应的带入减法函数去处理。具体的比较可以使用字符串的相关知识去比较。 2、相减要先对齐数组,依照减数的长度,执行相应的减法运算次数。 3、不需要借位相减的话,直接减去;需要的话,向前借一位,若前一位是0,则再前借(此时前一位的0变为10)。 测试程序效果如下:   以下代码包括相减函数,比较被减数减数函数,若有错误,请指出:

高精度加法,乘法,阶乘

#include <iostream>#include <map>#include <string>#include <algorithm>using namespace std;const int Max = 50000;string str1,str2;/***********乘法***********/void chenfa(){cin >> str1>>str2;int a

高精度治具加工的重要性和创新性

在现代制造业中,高精度治具加工扮演着至关重要的角色。它不仅是生产过程中的关键环节,更是推动行业不断创新和发展的重要力量。时利和将解析高精度治具加工的重要性和创新性。   一、高精度治具加工的重要性   1.确保产品质量   高精度治具能够为生产过程提供准确的定位、夹紧和导向功能,从而确保产品的尺寸精度、形状精度和表面质量。例如,在电子制造领域,高精度的治具可以保证芯片的精确安装,提高电子

信息学奥赛初赛天天练-83-NOIP2014普及组-基础题2-输入设备、输出设备、操作系统、二进制、整数除法、while、do while循环

1 NOIP 2014 普及组 基础题2 4 以下哪一种设备属于输出设备( ) A 扫描仪 B 键盘 C 鼠标 D 打印机 5 下列对操作系统功能的描述最为完整的是( ) A 负责外设与主机之间的信息交换 B 负责诊断机器的故障 C 控制和管理计算机系统的各种硬件和软件资源的使用 D 将没有程序编译成目标程序 11 下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( ) A 296

【HDU】4927 Series 1 高精度

传送门:【HDU】4927 Series 1 题目分析:公式很好推,到最后就是C(n-1,0)*a[n]-C(n-1,1)*a[n-1]+C(n-1,2)*a[n-2]+...+C(n-1,n-1)*a[n]。 用C(n,k)=C(n,k-1)*(n-k+1)/k即可快速得到一行的二项式系数。 我看JAVA不到1000B 15分钟就能过。。。我又敲了大数模板然后将近2个小时才过T U

高精度加、减、乘、除(高精除以低精)

高精度加法 法1:P1601 A+B Problem(高精) #include <bits/stdc++.h>using namespace std;char s1[510], s2[510];int a[510], b[510], sum[510];int lena, lenb, lens;int main(){cin >> s1 >> s2;lena=strlen(s1);le

【高精度】-DLUTOJ-1176-大数乘法

题目链接:http://acm.dlut.edu.cn/problem.php?id=1176 题目描述:赤裸的大数乘法 解题思路: 突然想到自己没写过高精度乘法,就回咱们自己OJ上找出了这道题,赤裸的高精度乘法而已,没想到依然觉得不好写,准确说来是我从小到大算乘法的习惯使我产生了错觉:“ 想写大数乘法就得先写一个大数加法出来 ”。喂!我短路了半天才想明白,int 数组里可以存个两位数啊,再