原题地址:点击打开链接
——————正文——————
最中规中矩的高精度问题。
令f[n]为有2n个环时的移动次数,则f[n]=2*f[n-1]+2,因为f[n]的移动次数可以看成是用f[n-1]步移动了2*(n-1)个环到中间的柱子后,用2步移动左边的两个环到右边,然后再用f[n-1]步将中间的2*(n-1)个环移动到右边。
从递推公式可以发现当n=200时,数字会超过2^200,所以要用高精度。
比较简单,比较容易错的就是没有注意高精度,以及输出格式,代码如下:
#include<stdio.h>
class node
{
public:
int l;
int d[10000];
void assign(node nn)
{
int rd=2;
for(int i=0;i<nn.l;i++,l++)
{
d[l]=(nn.d[i]*2+rd);
if(d[l]>9)
{
rd=d[l]/10;
d[l]%=10;
}
else
rd=0;
}
if(rd)
d[l++]=rd;
}
void print()
{
for(int i=l-1;i>=0;i--)
printf("%d",d[i]);
printf("\n");
}
}a[400];
int main()
{
a[1].l=1;
a[1].d[0]=2;
for(int i=2;i<=200;++i)
a[i].assign(a[i-1]);
int n;
bool f=false;
while(scanf("%d",&n)!=EOF)
{
if(f)
printf("\n");
f=true;
a[n].print();
}
}
******<转载说明>******
转载注明:诚实的偷包贼
原文地址:http://blog.csdn.net/fanfank/article/details/8952325
******<转载说明/>******

本文介绍了一个经典的高精度计算问题,通过递归求解汉诺塔问题中不同环数时的移动次数。利用C++实现了一种高精度算法,并详细解释了递推公式及其背后的逻辑。

被折叠的 条评论
为什么被折叠?



