2016-11-09 71 views
-1

一個簡單的C++程序的內容是什麼,它轉換基礎斐波那契數的基數爲10的數字? 這是如何只用斐波那契數寫一個數字:基數爲10的數字爲斐波那契數

#include <iostream> 
using namespace std; 
int n, a, b, c, i; 
int main() { 
cin >> n; 
cout << n << " " << "=" << " "; 
    while(n > 0) { 
     a = 0; 
     b = 1; 
     c = 1; 
     while(c <= n) { 
      a = b; 
      b = c; 
      c = a + b; 
     } 
     if(b < n) cout << b << " " << "+" << " "; 
     else cout << b; 
     n = n - b; 
    } 
    return 0; 
} 
+0

請不要稱之爲「基礎斐波那契」。而且,問題是什麼?乍一看,你的程序似乎在做你想做的事。 – deviantfan

+0

只是爲了好玩,我修改了你的代碼並提出了一個解決方案。可能不是最好的,但一些快速測試與[本頁]的結果相匹配(http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibrep.html#section4)。 (未註釋)代碼位於:https://ideone.com/98wRrM。 –

+0

這是如何使用斐波那契數字編寫一個數字。我想將基數10中的數字轉換爲基礎斐波那契(或者它是如何被調用的)[鏈接] \(http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibrep。 html#section4) –

回答

0

this website,您可以在「基地斐波那契」其他斐波那契數的總和寫號。例如:

10 = 8 + 2 

其中8是第5個Fib數,2是第2個。所以,當你寫出來的「基地斐波那契」,你寫的像與第5和第2個「位」組二進制數:

10010 base fib = 10 base 10 
^^
8 2 

所以這個代碼創建其中整數每一位代表一個FIB整數序號。然後是簡單地打印(我用OP的代碼,以尋找可加在一起的纖維蛋白原的數量):

int n, a, b, c, i; 
cin >> n; 
cout << n << " " << "=" << " "; 
bitset<32> bits; // Use a bitset to store the digits 
while(n > 0) { 
    a = 0; 
    b = 1; 
    c = 1; 
    int count = 0; // "count" is the nth fib # calculated 
    while(c <= n) { 
     count += 1; 
     a = b; 
     b = c; 
     c = a + b; 
    } 
    bits.set(count - 1); // Set the bit 
    if(b < n) cout << b << " " << "+" << " "; 
    else cout << b; 
    n = n - b; 
} 
cout << endl; 

// Convert binary to string of 0s and 1s 
const string str_bits = bits.to_string(); 
const auto first_digit = str_bits.find('1') ; // locate the first '1' 

// if first_digit is NOT std::string::npos, we found the first 1 
if(first_digit != std::string::npos) { // found it; print the substring starting at the first '1' 
    std::cout << str_bits.substr(first_digit) << endl; 
} 
// Not found, so it's just 0 
else { 
    std::cout << "0" << endl ; // all the bits were zeroes 
} 

注意,根據該網站,沒有兩個連續的斐波納契數列可以在使用相同的金額。這段代碼沒有解決這個限制。

+0

再次感謝!如何解決這個限制? –