C语言,麻烦大佬看一下哪里错了,为什么给的0分,谢谢
题目是让你用递推来写,那个f1,f2,fn不是说表示数组,而是告诉你怎样将复杂问题变为简单式子。
递推就把复杂问题分解成重复的单运算,再通过循环累积计算。
这里fn就是前两个数的和,比如f3就是f1,f2的和,f4就是f2,f3的和,所以要得到f4(也就是n=4),只要先计算f1+f2,再拿这个和加上f2(上一次运算式子中最大数)。
另外,题目要求在循环递推时直接取余。(先求和再取余等同于分别取余再求和)。
下面我写的代码(考虑数值范围,我用长整型变量)。
#include<stdio.h>
typedef long long LLG;
LLG fun(LLG n);
int main(void)
{
LLG n=0;
while(1)
{
while(n<1 || n>1000000)
printf("Input: "),scanf("%I64d",&n);
printf("Output: %I64d\n\n",fun(n));
n=0;
}
return 0;
}
LLG fun(LLG n)
{
LLG i,f1=1,f2=1,f;
if(n==1 || n==2) return 1;
for(i=3;i<=n;i++)
{
f=f1%10007+f2%10007;
f1=f2,f2=f;
}
return f;
}
要在过程中就用%10007取余,否则第四十多项时就会溢出。
你的算法也与题目要求有出入。
#include "stdio.h"
int main(int argc,char *argv[]){
int a,b,n,i,t;
printf("Enter n(int 0<n<1000001)...\nn=");
if(scanf("%d",&n)!=1 || n<1 || n>1000000){
printf("Input error, exit...\n");
return 0;
}
if(a=b=1,n>2)
for(i=3;i<=n;i++){
t=b%10007;
b=(t+a%10007)%10007;
a=t;
}
printf("%d\n",b);
return 0;
}
若帮助了你,请采纳。
2020-01-16
结果当然不对了
最简单的改法,每个计算的同时就取余
另外,仔细看题,n的规模是一百万