谁做过大小数除法竖式过程法

在做除法是,除数一定大于余数是否正确
对,如果除数小于余数,那就说明还能够除去一个除数
为您推荐:
不正确-3/-2=1 余数是-1
对,如果除数小于余数,那就说明还能够除去一个除数
扫描下载二维码Big Number(7)
//两个大整数相除和取余。除法用直接的减法实现,效率较低。&
保存于此,后面对这种方法进行改进。应该是uva 10494 这题。
//两个大整数相除和取余。除法用直接的减法实现,效率较低。
#include&cstdio&
#include&iostream&
#include&cstring&
#include&string&
#define MAXN 200
struct bign
int len,s[MAXN];
bign(){ memset(s,0,sizeof(s)); len=1;}
bign(const bign& c)
bign(const char* num){ *this= }
void clean()
{//去除前导0
while(len&1 && !s[len-1]) len--;
string str() const
string res=&&;
for(int i=0;i&++i) res=(char)(s[i]+'0')+
bign operator=(const bign &b)
for(int i=0;i&MAXN;++i)
s[i]=b.s[i];
bign operator=(const char *num)
len=strlen(num);
for(int i=0;i&++i) s[i]=num[len-1-i]-'0';
bign operator+(const bign &b) const
for(int i=0,g=0;i&max(len,b.len)||g;++i)
if(i&len) x+=s[i];
if(i&b.len) x+=b.s[i];
c.s[c.len++]=x%10;
bign operator-(const bign& b) const
for(int i=0,g=0;i&++i)
int x=s[i]-g;
if(i&b.len) x=x-b.s[i];
c.s[c.len++]=x;
c.clean();//去除前导0
bign operator/(bign& b)
while(c&=b)
n=n+bign(&1&);
bign operator%(bign& b)
while(c&=b)
n=n+bign(&1&);
bool operator&(bign& b)
{//该函数首先调用clean函数去除前导0,所以可能改变bign变量
b.clean();
if(len!=b.len) return len&b.
for(int i=len-1;i&=0;--i)
if(s[i]!=b.s[i]) return s[i]&b.s[i];
bool operator&=(bign &b)
return !(*this&b);
istream& operator&&(istream& in, bign& x)
x=s.c_str();
ostream& operator&&(ostream& out, const bign& x)
out&&x.str();
int main()
bign a,b,s,m;
while(cin&&a&&c&&b)
if(c=='/') cout&&a/b&&
else cout&&a%b&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:98283次
积分:2543
积分:2543
排名:第11479名
原创:142篇
转载:11篇
评论:20条
(6)(2)(1)(1)(3)(2)(10)(19)(20)(18)(8)(3)(3)(3)(15)(1)(9)(7)(21)(4)(1),可是她们没教过大数除法&
连减,减到不够减,为止.减了几次?就是几个月.
为您推荐:
其他类似问题
扫描下载二维码研究一下大整数精确除法用什么算法最好_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:268,771贴子:
研究一下大整数精确除法用什么算法最好收藏
以下N为被除数的二进制位数:第一种方法是求倒数,根据牛顿迭代法,设序列{Xn},递推公式为X(n+1)=2X(n)-aX(n)²,a为常数且为正,则当X0∈(0,1]时有lim&n→∞&(Xn)=1/a,且精度随着迭代次数指数增长。故方法一为根据递推公式求除数的倒数(因为被除数大于1,倒数一定小于1,可以用定点数表示),然后乘以被除数即得到原来的商。迭代次数为logN,每次迭代中需要进行一次移位和两次大整数乘法,定点数乘法还要额外加一次移位,总时间复杂度为O(logN * (N + NlogN + NlogN)) = O(Nlog²N);第二种方法是第一种方法的改进版,设被除数为a,除数为b,则写成分式为a/b,分式具有分子分母同时乘以非零数值不变的性质,首先将分子分母乘以一常数X,使得bX∈(0,1],然后将分子分母同时乘以(2-分母),不断进行迭代直至分母足够接近1,此时分子即是所求的商。与方法一相比,方法二不需要估算X0,每次迭代仍然需要两次乘法两次移位,因此时间复杂度仍然是 O(Nlog²N)。部分AMD处理器的浮点除法采用此方法进行;第三种方法即是常用的试商法。分为按位试商和按双字试商两种。按位试商只要逐一移位比较即可,时间复杂度O(N²)。按双字试商则由于试商存在误差,必须在试商之后用试商乘以除数与被除数作比较,由于是双字乘以大整数时间为线性,总体时间复杂度为O(N+(N-1)+(N-2)+(N-3)+...+1)=O(N(N+1)/2)=O(N²)。总之试商法的时间复杂度是O(N²)。那么问题来了,方法一和方法二的共同特点是,每次迭代都必须进行两次至少N位的乘法,因此浪费了大量时间。实测即使是数万位数的除法(尤其是被除数远远长于除数的情况下,为了降低定点数误差就必须将被除数和除数左移位相当长的距离)方法二的时间依然是方法三的时间的数十倍甚至上百倍。而且方法三可以同时获得商和余数,方法一和方法二都做不到。
食人骨,吸人精 东方魔幻「大青云」神话鼻祖,巅峰巨制!
试过二分法没有?
通过试商,比如取被除数高64位 除以 除数高32位,可以在每次迭代中得到32位的结果,从而减少迭代次数
借个坟,/candy/item/6c84844cfcfd09ab61d7b9c2 这个问题前两天把我坑得死去活来今天才试出解法,你碰过么?
虽然是个坟帖,但是希望LZ有空的时候能联系下我QQ
我对牛顿迭代算法有些疑问想请教QAQ
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 excel除法函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信