到底有多二(15 分)

一個整數“犯二的程度”定義爲該數字中包含2的個數與其位數的比值。如果這個數是負數,則程度增加0.5倍;如果還是個偶數,則再增加1倍。例如數字-13142223336是個11位數,其中有3個2,並且是負數,也是偶數,則它的犯二程度計算爲:3,約爲81.82%。本題就請你計算一個給定整數到底有多二。

輸入格式:

輸入第一行給出一個不超過50位的整數N

輸出格式:

在一行中輸出N犯二的程度,保留小數點後兩位。

輸入樣例:

-13142223336

輸出樣例:

81.82%


做題一定要靜下心來,仔細思考,做這題時太着急,錯了好多次都沒過,引以爲戒!!

這題用字符串比較好



#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main ()
{
string s;
cin>>s;
int num=0,l,i=0;
double ans,f1=1,f2=1;  //這裏注意f1,f2要設成double型,因爲後面f1=1.5;
l=s.length();
if (s[0]=='-') {i++;f1=1.5;}  //如果是負數,從a[1]開始遍歷
for (;i<l;i++)
if (s[i]=='2') num++;
if ((s[l-1]-'0')%2==0) f2=2.0;
if (s[0]=='-') l--;  //如果是負數,長度減一,第一次我和上面的判斷寫一起了,導致a[l-1]不能遍歷
ans=1.0*num/l*f1*f2*100;
cout.precision (2);
cout<<fixed<<ans<<"%"<<endl;
return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章