求整数开方c++的源代码(立即给分)

darkwowowo 2002-03-10 08:03:17
我要做一个大整数的开方运算,数的上限是10的50次方,我已经把乘法和加法做好了,现在要求用这两种方法组合,如果用到除法减法运算也可以,做出开平方运算,还有,把io也做了,输入是从文件sqrt.in读入,输出到sqrt.out。详细的算法注释。
...全文
409 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkwowowo 2002-03-11
  • 打赏
  • 举报
回复
简单明了,不过我的大数运算出问题了,看来还是做不出来。。。。。。。。。。。。。。。。。
LeeMaRS 2002-03-11
  • 打赏
  • 举报
回复
不是刚在算法版讨论完么?……

用牛顿迭代法解方程X^2-A=0
A是要开方的数

#include "iostream.h"

void main()
{
float A,x,x0;
A=25;
x=A;
do
{
x0=x;
x=(x0+A/x0)/2;
}while (x<x0);
cout<<x;
}

只要相应改成你的大数运算应该就可以了吧
hlym 2002-03-10
  • 打赏
  • 举报
回复
都出了高招,我还能说什么?
darkwowowo 2002-03-10
  • 打赏
  • 举报
回复
各位帮忙看看,这是it_work的算法:
//初中的算法
class INT;//你的大整数类
int exp(const INT&x);//返回x的位数
sqrt(INT x,INT &y)
{
y=1;
y <<= (exp(x)/2); //移位的操作做了吗
INT z=y>>1;
x-= y*y;
for(; z!=0; z>>=1)
{
INT r = (2*y+z)*z;
if( x>r )
{
x-=r;
y+=z;
}
}
}
&y是什么?y究竟是什么?
darkwowowo 2002-03-10
  • 打赏
  • 举报
回复
不是考试的,不过明天就要交了。
darkwowowo 2002-03-10
  • 打赏
  • 举报
回复
老大,救命啦。我一直用java,很少接触c的,这些算法更少接触了。
IT_worker 2002-03-10
  • 打赏
  • 举报
回复
你在干嘛,如果是考试这算做弊了.
darkwowowo 2002-03-10
  • 打赏
  • 举报
回复
要求的输入是连续的,比如:12335436548672383659749679348763894563946老大,快点帮帮忙吧,我还在做另外一到题呢。
IT_worker 2002-03-10
  • 打赏
  • 举报
回复
// to IT_worker(IT工人)移位用除法可以吗?
如果你不嫌慢的画当然可以。

io的话你不嫌慢的话可以这样设计文件格式。
-9,876,543.或则+9,876,543.
这个每3个数用,隔开。最后用.表示结尾。输入的时候可以这样写了

fstream& operator>>(fstream&fin,INT&x)
{
char ch;
fin>>ch;
if(ch=='-') x=-1;
else x=1;
long l;
while(ch!='.')
{
fin>>l;
x*=1000;
x+=l;
fin>>ch;
}
}


fstream& operator<<(fstream&fout,INT x)
{
if(x>0) fout<<'+';
else fout<<'-';
//自己写吧
}
darkwowowo 2002-03-10
  • 打赏
  • 举报
回复
to zosatapo(隆杰@宗山太保) 我现在手头连一本参考书都没有,只是有点印象而已。
darkwowowo 2002-03-10
  • 打赏
  • 举报
回复
to IT_worker(IT工人)移位用除法可以吗?
darkwowowo 2002-03-10
  • 打赏
  • 举报
回复
to IT_worker(IT工人)好象就差个移位,还有,io要怎么解决阿?

to chaisave(save) 帮我把算法写出来啊,循环递归什么的,我现在想不出来啊

to其他人,一起帮帮我啊
chaisave 2002-03-10
  • 打赏
  • 举报
回复
初中的方法?
我也忘记了。
我想可以用Taylor中值定理展开(X0 = 1):
f(x) = x^(1/2)
= f(x0) + f'(x0)(x-x0) + f''(x0)(x-x0)^2/2!+...


= 1 + (x-1)*∑(2i-1)!!/(2^i*i!)
i
这样就可以求解了吧。
IT_worker 2002-03-10
  • 打赏
  • 举报
回复
//初中的算法
class INT;//你的大整数类
int exp(const INT&x);//返回x的位数
sqrt(INT x,INT &y)
{
y=1;
y <<= (exp(x)/2); //移位的操作做了吗
INT z=y>>1;
x-= y*y;
for(; z!=0; z>>=1)
{
INT r = (2*y+z)*z;
if( x>r )
{
x-=r;
y+=z;
}
}
}
toulouse 2002-03-10
  • 打赏
  • 举报
回复
开方计算可以解方程的方法求得:
设a的平方根=x,则
a = x * x,
x*x -a=0, (1)
求此方程的解即可,我现在没有编译器,明天可以到公司抽时间给你看看
darkwowowo 2002-03-10
  • 打赏
  • 举报
回复
随便是初中的还是泰勒迭代法,有就行,快点啦,急急急急!!!!
zosatapo 2002-03-10
  • 打赏
  • 举报
回复
初中就学习过的整数开方算法,不会连这个都要要问吧。
太过分,学习的知识对于程序员来说,太重要了。
chaisave 2002-03-10
  • 打赏
  • 举报
回复
这应该是数值计算的内容。
找本教材吧,我记不得那些个算法了。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧