コード問題--C+--牛客網--牛牛がコインを投げる--コインを投げるのはすべて正面または全部反対の確率である.


コード問題--C+--牛客網--牛牛がコインを投げる--コインを投げるのはすべて正面または全部反対の確率である.
タイトルの説明
牛は最近とてもコインを投げることが好きで、彼は今日とてもつまらないため、彼は家でn回のコインを投げて、もしこのn回のコインがすべて上に向かってあるいはすべて下に牛を投げたらとても楽しくて、牛が喜ぶ確率はいくらですかをお聞きします.(コインを投げるたびに上を向く確率は下を向く確率と同じ)
  1
  
1
   
"1.00"
  
   1,               "1.00"
  2
  
5
   
"0.06"
  
   0.0625,               "0.06"
  :
  50\%50%   :1\leq n\leq1001≤n≤100
  100\%100%   :1\leq n\leq1e91≤n≤1e9
    n,                    。
     0.372  ,     "0.37"。
   0.957  ,     "0.96"。
(  ,          )

解題の構想、1回投げて、答えは1.00で、表裏がすべて楽しいため、2回目から確率は累計*0.5で、最後に四捨五入して小数の後の2位を保留して、C++の中でsprintf関数で処理します.sprintfとprintfは似ていて、違いはsprintfの最初のパラメータが書き込む文字列を指すポインタであり、その他はprintfと同様に、なぜ0.001を加えるのか、コンパイラが異なるため、ansの取捨選択が異なる可能性があり、説明中の条件を達成するために+0.001である.
コードは次のとおりです.
class Solution {
public:
    /**
     *                     
     * @param n int   n
     * @return string   
     */
    string Probability(int n) {
        if(n >= 9)
        {
            return "0.00";
        }
        double ans = 1;
        for(int i = 1; i < n; i++ )
        {
            ans *= 0.5;
        }
        char printAns[10];
        sprintf(printAns,"%.2lf",ans+0.001 );
        return printAns;
    }
         /*
        if(n==1){
            string res="1.00";
            return res;
        } 
        if(n==2) {
            string res="0.50";
            return res;
        }
        if(n==3){
            string res="0.25";
            return res;
        }
        if(n==4){
            string res="0.13";
            return res;
        }
        if(n==5){
            string res="0.06";
            return res;
        }
        if(n==6){
            string res="0.03";
            return res;
        }
        if(n==7){
            string res="0.02";
            return res;
        }
        if(n==8){
            string res="0.01";
            return res;
        }
        string res="0.00";
        return res;
    }
    */  
};