c语言问题,求高手指点,

[复制链接]
查看11 | 回复4 | 2011-5-1 02:00:43 | 显示全部楼层 |阅读模式
题目是Anumbersequenceisdefinedasfollows:
f(1)=1,f(2)=1,f(n)=(A*f(n-1)B*f(n-2))mod7.
GivenA,B,andn,youaretocalculatethevalueoff(n).
输入Theinputconsistsofmultipletestcases.Eachtestcasecontains3integersA,Bandnonasingleline(1=A,B=1000,1=n=100,000,000).Threezerossignaltheendofinputandthistestcaseisnottobeprocessed
输出Output
Foreachtestcase,printthevalueoff(n)onasingleline
我的程序:
#includestdio.h
inta,b;
intmain(){
intf(intn);
intn,x;
scanf(\"%d%d%d\",
while(a!=0||b!=0||n!=0){
x=f(n);
printf(\"%d\\n\",x);
scanf(\"%d%d%d\",
}
return0;
}
intf(intn){
intx;
if(n==1||n==2){
if(n==1)
x=1;
else
x=1;
}
else
x=(a*f(n-1)b*f(n-2))%7;
return(x);
}
最后检测总出RuntimeError
(STACK_OVERFLOW)
求高人指教
回复

使用道具 举报

千问 | 2011-5-1 02:00:43 | 显示全部楼层
麻烦给我一个正解被....我被卡这了,谢谢
回复

使用道具 举报

千问 | 2011-5-1 02:00:43 | 显示全部楼层
f(1)=1,f(2)=1,f(n)=(A*f(n-1)B*f(n-2))mod7.
以下是用单变量迭代的方法:
unsignedlongintr=1,s=1,i,t;
for(i=3;i=n;i)
{
t=(A*rB*s)%7;
s=r;
r=t;
}
循环完了,r就是结果

用数组来完成不要一个结果单独放一个数组元素,因为n可能到100000000,还是可能会溢出,可以考虑像上面的一样原地来做
回复

使用道具 举报

千问 | 2011-5-1 02:00:43 | 显示全部楼层
还是不可以的.
回复

使用道具 举报

千问 | 2011-5-1 02:00:43 | 显示全部楼层
我试过了啊,是可以的啊,你用什么编译的啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行