小数点计数器?

时间:2014-07-04 23:11:47

标签: c++

我做了这个柜台,但它没有工作,我真的不知道如何解决它.. 计数器应该做下一步:

a=1/1.5=0.66
a=0.66/1.49=0.44
a=0.44/1.48=0.29

所以决赛" a"应该是0.29,但小数点计数器没有正常工作,这里是我的代码

#include <string>
#include <iostream>
using namespace std;
int main(){
    string test="aaa";
    double i,j;
    double a=1.0;
    for (size_t j = 0; j < test.size(); j++)
    {
        for ( i = 1.5;i > 0.0;i = i - 0.01)
        {
            while (test[j] == 'a')
            {
                a=a/i;
                break;
            }
        }
    }
    cout <<"a="<<a<<endl;
    system("pause");
    return 0;
}

如何修复小数点计数器,使字符串中的每个字符减少0.01?

2 个答案:

答案 0 :(得分:0)

代码中有太多循环。您可以在循环中使用单个for循环:

  1. 测试字符串中的索引字符是否为a
  2. 如果是,请执行计算
  3. 这导致了以下内容:

    #include <string>
    #include <iostream>
    
    int main(){
        std::string test = "aaa";
        double a=1.0;
        for (std::size_t j = 0; j < test.size(); ++j) {
            if (test[j] == 'a') {
                a /= (1.5 - 0.01 * j);
                std::cout << "a=" << a << '\n';
            }
        }
    }
    

    Live demo

    进一步解释这一行:

    a /= (1.5 - 0.01 * j);
    

    您应该将计算结果视为:

    a = 1    / (1.5 - 0.01 * 0) = 0.66
    a = 0.66 / (1.5 - 0.01 * 1) = 0.44
    a = 0.44 / (1.5 - 0.01 * 2) = 0.30
    

    是:

    a = 1    / (1.5 - 0)    = 0.66
    a = 0.66 / (1.5 - 0.01) = 0.44
    a = 0.44 / (1.5 - 0.02) = 0.30
    

    上面的代码将产生:

      

    α= 0.666667

         

    α= 0.447427

         

    α= 0.302316

答案 1 :(得分:0)

我的时间太慢了,但这里的解决方案与杰弗里给出的解决方案类似:

#include <string>
#include <iostream>

using namespace std;

int main(int, char**)
{
    string test="aaa";

    double i = 1.5;
    double a = 1.0;

    for (unsigned int j = 0; j < test.length(); ++j)
    {
        a = a / i;

        i -= 0.01;  
    }

    cout << "a=" << a << endl;

    return 0;
}

结果是0.302316