L1-017 到底有多二(chen-C語言)

chenmou40發表於2020-10-24

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

輸入格式:
輸入第一行給出一個不超過50位的整數N。
輸出格式:
在一行中輸出N犯二的程度,保留小數點後兩位。

輸入樣例:
-13142223336
輸出樣例:
81.82%

二,思路(測試點2未通過)
1.字元陣列
2.判斷正負(字元)
3.判斷奇偶(陣列取餘)
4進行運算

三,新點
1.強制型別轉換的使用(double)
2.使用strlen(a[i])去實現得到陣列的位數(負數情況下,為strlen (a[i]) - 1 )
int i = (int)(a[strlen(a)-1] - ‘0’);
3.輸出為nan:not a number,不是一個數字

四,程式碼

#include<stdio.h>   //類比於L1-003
#include<string.h>
int main()
{
    double er=1.0;
    char a[55];
    gets(a);
    int i,count = 0;
    for(i=0;i<strlen(a);i++)
    {
        if(a[i]=='2')//使用字元'2',因為是字元陣列
            count++;
    }
    int u = strlen(a);
    if(a[0]=='-')
    {
        u = u-1;
        er = er*1.5;
    }
    if(a[u]%2==0)
            er = er*2.0;
    er = 100*er*count/u;
    printf("%.2lf\%\n",er);
        
    
    return 0;
    
}

相關文章