2014-07-04 42 views
0

我做了這個櫃檯,但它沒有工作,我真的不知道如何解決它.. 計數器應該做下面的步驟:小數點計數器?

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與字符串中的每一個字符減少?

+4

普羅蒂普線的東西:確保你正確縮進代碼 – HamZa

+0

什麼現在是否確實認爲你不正確? – user3553031

+0

此代碼給我5.36191e + 111的結果? – user3803421

回答

0

代碼中循環太多。你可以只使用循環中的單個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

+0

錯誤:'test =='中'operator =='不匹配a'' – user3803421

+0

@ user3803421您確定您使用上述代碼嗎?我已經添加了一個實時演示,顯示代碼編譯並運行得很好。 – Shoe

+6

我會在一分鐘內答覆你的答案 – user3803421

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

+0

謝謝,正是我想要的最後一個答案直接 – user3803421