算法分析与设计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;
}
posted @ 2019-09-24 17:42  ZC_Wang  阅读(194)  评论(0编辑  收藏  举报