據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
}
注意,根據該網站,沒有兩個連續的斐波納契數列可以在使用相同的金額。這段代碼沒有解決這個限制。
請不要稱之爲「基礎斐波那契」。而且,問題是什麼?乍一看,你的程序似乎在做你想做的事。 – deviantfan
只是爲了好玩,我修改了你的代碼並提出了一個解決方案。可能不是最好的,但一些快速測試與[本頁]的結果相匹配(http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibrep.html#section4)。 (未註釋)代碼位於:https://ideone.com/98wRrM。 –
這是如何使用斐波那契數字編寫一個數字。我想將基數10中的數字轉換爲基礎斐波那契(或者它是如何被調用的)[鏈接] \(http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibrep。 html#section4) –