首页 > 试题广场 >

以下C程序的输出结果是: int fun1(int i...

[单选题]
以下C程序的输出结果是:
int fun1(int i) {
    return i < 2 ? i : fun1(i - 1) + fun1(i - 2);
}
int fun2(unsigned int i) {
    unsigned int j = i & 0xFFFF;
    return (j & 0x9108) ^ (j & 0x8019);
}
int main() {
    int n = fun2(fun1(101)) % 4;
    printf("%d", n);  
    return 0;  
}
  • 0
  • 1
  • 2
  • 3
int fun1(int i) {
    return i < 2 ? i : fun1(i - 1) + fun1(i - 2);
	/*f0=0 f1=1 f2=1 f3=2 f4=3 f5=5 f6=8 f7=13
	  f8=21 f9=34 f10=55 f11=89 f12=144
	  f3x(x=0,1,2...)是偶数,则f101肯定是奇数
	*/
}
int fun2(unsigned int i) {
    unsigned int j = i & 0xFFFF;
    return (j & 0x9108) ^ (j & 0x8019);//a-f为0或1
	/*(j & 1001 0001 0000 1000) ^ (j & 1000 0000 0001 1001)
	  (a00b 000c 0000 d000) ^ (a000 0000 000e d00f)
	  000b 000c 000e 000f
        */
}
int main() {
    int n = fun2(fun1(101)) % 4;
    printf("%d",n);//f1(101)是奇数,f2中j最后一位是1,f必为1,则n为1
    return 0;  
}


发表于 2019-12-31 15:19:25 回复(1)
斐波那契数列中3的倍数项为偶数,则101项为奇数,func1(101)返回一个奇数;
func2中j的末尾位则为1      return 为0异或1 为1;

发表于 2020-07-27 10:07:40 回复(0)
101是奇数所以fun1返回1,与0FFF相与不变,j是1, 与1相与就是判断奇数偶数,异或操作,不同为1
发表于 2020-07-25 22:48:12 回复(0)
这题牛皮
发表于 2020-01-11 22:35:07 回复(0)