1+1/3!+1/5!+1/7! ....
感觉..用C就是不好写..(不是不好写...是答案不好看)宣告int...
1=1
1/3!=0.16=0
1/5!=0.0083=0
1/7!=0.00019=0
.........
一堆长的像零的相加.....实在没什么好算的....
答案:
复制程式
void main(){ printf("≒1");}
看在O(1)的份上应该会有两分...
不过..人都是贪婪的..有两分了就想要五分..
暴力法...小就小把int 改成float照加
1=1
1/3!=0.16
1/5!=0.0083
1/7!=0.00019
发现....误差颇大....
1/3!误差一次,1/5! 误差一次,1/7! 误差一次,....误差n次
一堆误差加起来..应该就会没有误差(是这样吗)...
这样应该有五分...
有了菜就想要吃肉...
那先通分了好..一堆int+-*/应该不会产生误差
以7为例(只考虑分子)
1/1+1/3!+1/5!+1/7!
=7!+7*6*5*4+7*6+1 /7!
有没有感觉....
没有...没有是正常的...再简化一下
=7*6(5*4*3*2*1+5*4+1)+1
=7*6(5*4(3*2+1)+1)+1
感觉就是长的很像...
(a*b*c +1)
有没有感觉....有一点点了..
复制程式
int sum_factorial(int n){
if(n<1){ return 1;}
else{ return (n*(n-1)*(sum_factorial(n-2)))+1;}
}
void main(){ printf("%2d",sum_factorial(7));}
这样....应该会0分...
那个只是分子....
记得再除 n! <--只有一次误差