算法分析與設計C++大整數數組漢諾塔雙塔實現

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

#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;
}
相關文章
相關標籤/搜索