ZC_Wang · 2019年09月24日

算法分析与设计C++大整数数组汉诺塔双塔实现

利用公式a[i] = 2^i - 1.

#include<iostream>
#include<string.h>
using namespace std;
struct num{
    int a[1000];
    int s=1;
};
void Mul(num &m){
    for(int j=0; j<m.s; j++){
        m.a[j] *=2;
    }
    for(int j=0; j<m.s; j++){
        m.a[j+1] += m.a[j]/10;
        m.a[j] %= 10;
    }
    while(m.a[m.s] != 0){
        m.a[m.s+1] += m.a[m.s]/10;
        m.a[m.s] %= 10;
        m.s++;
    }
}

int main(){
    int m;
    cin>>m;
  
    num p;
    memset(p.a,0,sizeof(p.a));
    p.a[0]=1;
    for(int i=0; i<m; i++){
        Mul(p); 
    }
    for(int i=0; i<p.s; i++){
        if(p.a[i] != 0){
            p.a[i]--;
            break;
        }
        p.a[i] = 9;
    }
    Mul(p);
    for(int i = p.s-1; i>=0; i--){
        cout<<p.a[i];
    }

    return 0;
}
推荐阅读
关注数
0
文章数
18
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息