Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
1 <= n <= 1,000,000。
答案:
#include
#include
#define MOD 10007
#define MAXN 1000001
int n, i, F[MAXN];
int main()
{
scanf("%d", &n);
F[1] = 1;
F[2] = 1;
for (i = 3; i <= n; ++i)
F[i] = (F[i-1] + F[i-2]) % MOD;
printf("%d\n", F[n]);
return 0;
}
2
错误答案:
#include
using namespace std;
#include
#include
#include
//#include
int main()
{
//vector x;
int a[10][100];
int k = 0;
string s;
int n;
int sum=0;
cin >> n;
while (k {
cin >> s;
for (int i = 0; i < s.length(); i++)
{
if (s[i] >= '0'&&s[i] <= '9')
{
sum += (s[i] - '0')*pow(16, s.length()-1- i);
}
else
{
sum += (s[i] - 'A' + 10)*pow(16, s.length() -1 - i);
}
}
//cout << sum< int j = 1;
while (sum!=0)
{
a[k][j] = sum % 8;
sum = sum / 8;
j++;
}
a[k][0] = j-1;
k++;
}
for (int j = 0; j < k; j++)
{
for (int i = a[j][0]; i >0; i--)
{
cout << a[j][i];
}
cout << endl;
}
return 0;
}
正确答案:
// 十六进制转换8进制 AC
#include
#include
using namespace std;
int arr[10000001];
int main()
{
int n,len_str,i,j;
string str,str2;
cin>>n;
while(n--)
{
cin>>str;
len_str=str.length();
str2="";
// 十六进制转换为二进制
for(i=0;i