Счетчик десятичных знаков?

#c

#c

Вопрос:

Я создал этот счетчик, но он не работал, и я действительно не знаю, как это исправить.. предполагается, что счетчик выполнит следующие шаги:

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

Таким образом, конечная буква «а» должна быть равна 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 с каждым отдельным символом в строке?

Комментарии:

1. Подсказка: убедитесь, что вы правильно разместили отступ в своем коде

2. Что он делает сейчас, что вы считаете неправильным?

3. Этот код дает мне результат 5.36191e 111?

4. хотя так и должно быть .29

5. Прежде всего, ваши первоначальные предположения неверны. Если округлить до ближайшего с 2 десятичными знаками, 1/1.5 будет 0.67 . 1/1.5/1.49 есть 0.45 . И 1/1.5/1.49/1.48 это 0.30

Ответ №1:

В вашем коде слишком много циклов. Вы можете просто использовать один for цикл и внутри цикла:

  1. проверьте, является ли индексированный символ в строке a
  2. если это так, выполните вычисление

Это приводит к чему- то вроде:

 #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
  

Приведенный выше код приведет к:

a=0,666667

a=0,447427

a=0,302316

Комментарии:

1. @user3803421 Вы уверены, что используете приведенный выше код? Я добавил живую демонстрацию, которая показывает, что код компилируется и работает просто отлично.

2. я отмечу ваш ответ через минуту

Ответ №2:

Я немного медлю, но вот решение, аналогичное тому, которое дал Джеффри:

 #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

Комментарии:

1. Спасибо, это именно то, чего я хотел от последнего ответа напрямую