首页 > 编程知识 正文

十层汉诺塔最简单方案,八层汉诺塔最快解法教程

时间:2023-05-06 14:09:59 阅读:242730 作者:2799

100层 ymddy问题

这已经已经跟 ymddy问题 没什么关系了 ,只是对超出存储范围的结果,用数组存取采取 千万进制 开大小为5的数组 5*7=35位(10进制) 就够了。
想了解ymddy问题的实现过程可以看看ymddy(详解)

#include<stdio.h>#define ll long long #define C 10000000 //千万进制ll res[5]={0}; int tot=0;//最高位(按千万进制)void get_res(int n){ int i; ll adw=0; res[tot]=1; //计算2^n while(n--){ for(i=0;i<=tot;i++){res[i]=res[i]*2+adw;adw=res[i]/C;res[i]%=C;if(adw&&tot==i)tot++;//当前位 需 进位(超出了千万)且 为当前最高位,则需增加一位高位} } i=0;//从最低位开始 //减去1 while(!res[i])i++; res[i]--; if(i!=0)while(i--)res[i]=C-1;//若需借位 }int main(){ int n,i; scanf("%d",&n); get_res(n);//获得结果 while(!res[tot])tot--;//去掉首位 0 printf("%ld",res[tot]);//输出首位 for(i=tot-1;i>=0;i--) printf("%07ld", res[i]);//按每7位输出 不足补0 printf("n"); return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。