一個整數“犯二的程度”定義爲該數字中包含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;
}