使用C中的while循环计算百分比序列

时间:2018-02-14 22:19:30

标签: c

我需要计算不同光速百分比的公式。百分比为30,60,90,93,96,99,99.3,99.6,99.9,99.93等,一直到99.999%。 我试图找到一种方法,只使用循环和运算符来获得该序列,但无法得出任何结论。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

  

百分比是30,60,90,93,96,99,99.3,99.6,99.9,99.93等,一直到99.999%

使用1.0的差异:.7,... .07,... .007,...,几何级数。

每个(1.0 - dif/power10) * 100.0计算都不依赖于可能引入累积舍入误差的先前FP计算。 1

int main(void) {
  double power10 = 1.0;
  for (int power = -1; power >= -5; power--) {
    power10 *= 10.0;
    for (int digit = 3; digit <= 9; digit += 3) {
      int dif = 10 - digit;
      printf("%g%%\n", (1.0 - dif/power10) * 100.0);
    }
  }
}

输出

30%
60%
90%
93%
96%
99%
99.3%
99.6%
99.9%
99.93%
99.96%
99.99%
99.993%
99.996%
99.999%

1 power10 *= 10.0;当然可能达到10 22

对于那些喜欢Code Golf的人来说,这是一个适度的尝试,输出如上所述。

int main() {
for(int i=0;i<15;i++)printf("%g%%\n",100-atof((char[]){'7'-i%3*3,'0','e','-','0'+i/3,0}));
}

答案 1 :(得分:1)

解决此问题的方法是编写一个循环,其执行current += 30三次,然后current += 3,再次三次,然后current += 0.3,依此类推。 代码可能如下所示:

int main() {

    double current=0;
    double toAdd=30;
    for (int i=0;i<5;i++) {
        for(int j=0; j<3; j++) {
            current+=toAdd;
            printf("%lf\n",current);
        }
        toAdd /= 10;
    }
}

希望它有所帮助。