牛的Fibonacci数列怎么做?

奶牛们发现了Fibonacci数列:1,1,2,3,5,8,13,21,34,…即下一个元素是前两个元素之和(这个数列是从1,1开始的)。
不幸的是,愚蠢的牛没有发明空格这个字符,因此把这个数列记录下来时,数之间没有标点或空格,就像这样:112358132134…
但是这是一个有趣的问题。给出数列的前两个元素(都是正整数且小于100),计算数列的第K位(1<=K<=500)。保证你遇到的数列中的每一个数都是一个长整型数。

输入格式:

单独的一行,有三个空格隔开的整数:cowfib数列的第一个数,cowfib数列的第二个数,K。

输出格式:

单独的一行,一个数字表示指定序列的第K位的数字

样例输入:

1 1 10

样例输出:

1

数据范围:

1<=K<=500
给出元素小于100

时间限制:

1000

空间限制:

65536

5 个赞

斐波那契数列会写吧??

4 个赞

你要知道(string)+(string)会将两个拼接

如该代码

#include<bits/stdc++.h>
using namespace std;
string a="114",b="514";
int main(){
	cout<<a+b;
	return 0;
}

输出114514

3 个赞

还有to_string()

他可以将括弧内填的(int)直接转为(string)

如该代码

#include<bits/stdc++.h>
using namespace std;
int a=114514;
int main(){
	cout<<to_string(a);
	return 0;
}

输出114514

4 个赞

所以重要代码板块就是

a[i]=a[i-1]+a[i-2];
s=s+to_string(a[i]);
4 个赞

4 个赞

我还有一种思路,就是从1开始枚举斐波那契数,用一个cnt记录到现在为止到底有几位,枚举到>=k的时候就结束,代码如下

#include <bits/stdc++.h>
using namespace std;
long long n, m, k;
long long sumd(long long x) {
	long long sum = 0;
	while(x) {
		x /= 10;
		sum++;
	}
	return sum;
}
int main() {
	scanf("%lld%lld%lld", &n, &m, &k);
	k -= sumd(n);
	while(k >= 0) {
		if(k - sumd(m) <= 0) {
			break;
		} 
		k -= sumd(m), m += n, n = m - n;
	}
	if(k == 0) {
		cout << n % 10; 
		return 0;
	}
	k = sumd(m) - k;
	while(k) {
		k--, m /= 10;
	}
	cout << m % 10;
	return 0;
}
4 个赞

好麻烦

有函数不用干什么??主要是我懒(bushi)

4 个赞

考场上函数容易逝

4 个赞

2 个赞

我的头文件错了吗?

2 个赞

6

2 个赞

\ color{black}{ 6}

1 个赞