黄金分割数表达式为
在这里只用模拟笔算开方算法高精度计算黄金分割数。
模拟笔算开方算法代码(十进制,C++):
#include <iostream>
using namespace std;
int main (void)
{
int d,e=2,i=0,j,k=10,N,m;
cout<<"请输入黄金分割数位数:\n",cin>>N,N++;
int *a=new int[2*N],*b=new int[N],*c=new int[2*N];
while(++i<2*N)a[i]=b[i/2]=c[i]=0;
for(cout<<"0.6",a[b[1]=m=2]=4;--N>1;)
for(b[m]=e,d=0,j=k;--j+1&&!d;)
{
for(c[i=2*m]=j*j%k,e=j*j/k;--i>m-2;e=d/k)c[i]=(d=e+b[i-m+1]*j)%k;
for(i=d=m-1;i<2*m&&a[i]<=c[i];i++)(a[i]<c[i])?d=0:1;
if(d)for(e=j<<1,cout<<j,i=1+2*m++;--i>m-2;)if((a[i]-=c[i])<0)a[i]+=k,a[i-1]--;
}
delete []a,delete []b,delete []c,cin.ignore(),cin.ignore();
return 0;
}
模拟笔算开方算法代码(C++,万进制一):
#include <iostream>
#include <stdio.h>
using namespace std;
int main (void)
{
int d=10000,e,f=1180,g,i=0,j,N,m;
cout<<"请输入黄金分割数位数:\n",cin>>N,N=N/4+1,cout<<"0.6180";
long *a=new long [N],*b=new long [2*N],*c=new long [2*N];
while(++i<2*N)a[i/2]=b[i]=c[i]=0;
for(b[a[m=1]=2]=7600;--N>1;printf("%04d",f))
{
for(a[++m]=f*2,j=e=d,f=0;(e-f)&&j;)
{
for(g=(e+f)/2,i=2*m;--i>m-2;)c[i]=a[i-m+1]*g;
for(c[i=2*m]=g*g;i>m-1;c[i--]%=d)c[i-1]+=c[i]/d;
for(*a=i=m-1,j=g-f;i<2*m&&*a;i++)b[i]>c[i]?f=g,*a=0:b[i]<c[i]?e=g,*a=0:1;
}
for(i=2*m;i>m-2;i--)if((b[i]-=c[i])<0)b[i]+=d,b[i-1]--;
}
delete []a,delete []b,delete []c,cin.ignore(),cin.ignore();
return 0;
}
模拟笔算开方算法代码(C++,万进制二):
/*高精度计算黄金分割数C++*/
#include <iostream>
#include<stdio.h>
using namespace std;int main() {long i=0,j,k,p,q=10000,r=1180,N,m=1;cout<<
"Please input a number(>=4): \n";cin>>N,N/=4,cout<<"\n0.6180";long *a=new long
[2*N+1],*b=new long [2*N+1],*c=new long [2*N+1];while(++i<2*N)a[i]=b[i]=c[i]=0;for
(a[b[1]=2]=7600;--N;)for(b[++m]=r*2,printf("%04ld",b[m+1]=r=int(((a[m-1]*q+a[m])*q+a[m
+1])/22360.679775)),j=p=0,i=2*m+1;--i>m-1;j=k/q)p=(a[i]-=(c[i]=(k=b[i-m+1]*r+j)%q)+p)<0?a[
i]+=q,1:0;delete[]a,delete[]b,delete[]c;cout<<"\nThe End";cin.ignore(),cin.ignore();return 0;}
更多详细内容请看这里: https://pan.baidu.com/s/1kVFfvfh