问题描述
- C语言,计算1+1/2-1/3+1/4-1/5+1/6...,要求只使用一个循环
-
C语言,计算1+1/2-1/3+1/4-1/5+1/6...,要求只使用一个循环
解决方案
float foo(int n)
{
float acc = 1.0;
for (int i = 1; i < n; i++)
{
if (i % 2 == 0) acc += 1/float(i); else acc -= 1/float(i);
}
return acc;
}
int main()
{
float r = foo(100);
printf("%f", r);
}
解决方案二:
我记得程序员考证中的下午一题就有这个,当时是要用一行代码完成,for循环里面的内容:(-1)的(n+1)次方/ n ,然后累加。
解决方案三:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
float result = 1;
for(int i=2; i<=n; i++) //把1排除 ,从2开始
{
int flag;
if(0 == i%2) //判断是否是偶数
flag = 1;
else
flag = -1;
result += flag * 1.0 / i; //小数计算要用1.0
}
printf("%f",result);
}
解决方案四:
#include <stdio.h>
void main()
{
int i,s=1;
double sum=1.0;
for(i=2; ;i++)
{
sum+=s*1.0/i;
s=-s;
if(1.0/i<0.00001) break;
}
printf("%lfn",sum);
}
解决方案五:
for(int i=1;i<n;i++)
sum+=((-1)^i)/i;
解决方案六:
使用flag标记, 每次奇数时候, 赋值-1
int n = 20, flag = 1;
float s = 1;
for(int i = 2; i <= n; i++) {
s += 1 / i * flag ;
flag = - flag;
}
prinf("%lf",s);
flag 真的很强大,比如: 冒泡排序中的flag标记
时间: 2024-09-03 16:55:02