hdu1005 杭电ACM

n%=(i-2);的位置和RuntimeError(ACCESS_VIOLATION)有什么关系?AC代码:#include<stdio.h>main(){intfn[1... n %= (i-2);的位置和Runtime Error(ACCESS_VIOLATION) 有什么关系?

AC代码:
#include <stdio.h>

main()
{
int fn[10000];
int a, b, n;
fn[1]=fn[2] = 1;

while(scanf("%d%d%d", &a, &b,&n), a || b || n)
{
int i;
a %= 7;
b %= 7;
for(i = 3; i < 10000; i++)
{
fn[i] =(a * fn[i-1] + b * fn[i-2]) % 7;
if(fn[i]==1 && fn[i-1]==1)
{
break;
}
}
n %= (i-2);
fn[0] = fn[i-2];
printf("%d\n", fn[n]);
}
}

Runtime Error
(ACCESS_VIOLATION)
代码:
#include <stdio.h>

int fn[10000];
main()
{
int a, b, n;

while(scanf("%d%d%d", &a, &b,&n) != EOF, a || b || n)
{
int i;
a %= 7;
b %= 7;
fn[1]=fn[2] = 1;
for(i = 3; i < 10000; i++)
{
fn[i] =(a * fn[i-1] + b * fn[i-2]) % 7;
if(fn[i]==1 && fn[i-1]==1)
{
n %= (i-2);
break;
}
}
fn[0] = fn[i-2];
printf("%d\n", fn[n]);
}
}
展开
 我来答
百度网友1cf58ab
2012-08-20 · TA获得超过343个赞
知道小有建树答主
回答量:276
采纳率:50%
帮助的人:368万
展开全部
当把 n %= (i-2); 放在 if 语句中时,有可能执行不到这条语句,比如 a 和 b 都是 7 的倍数时,从 fn[2] 以后全部是 0,那么 for 循环一直到结束,都不会执行 if 语句的内容,然后再执行 printf("%d\n", fn[n]); ,当 n 大于等于 10000 时,fn[n] 越界了,当然是运行时错。
而 n %= (i-2); 放在循环外,就可以执行到,n 的值不会大于 10000-2,fn[n] 就没有越过数组 fn 的上界,当然不会出错。
明阿哩05
2012-08-20 · TA获得超过268个赞
知道答主
回答量:417
采纳率:0%
帮助的人:264万
展开全部
那是 运行时错误 异常 。楼主不必太过纠结,,,就是当程序出问题的 时候 会调用 它。C++中 异常非常多,还有许多其它 异常类 。
追问
那为什么会异常呢?理论上,放到 If 语句里面和在外面是一样的呀。在杭电上把n %= (i-2);放在if 里面,提交,过不了啊。就提醒Runtime Error (ACCESS_VIOLATION)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式