d561

輸入說明 :

共計三個測資點,每個測資檔中有多行小數n(-1<=n<=1),至多小數點以下有100位數

輸出說明 :

請輸出四捨五入至小數點以下第二位的結果

有點麻煩的題目,先判斷輸入是不是不到小數點以下第2位,是的話小數點以下第二位要補零

ex 輸入0.5 ,輸出要是0.50

再來判斷小數點以下第3位的大小,四捨五入

最後檢查假如某一位是9,然後因為四捨五入+1要進位,要手動把它調回0,然後它的前一位要加1

輸出有一個陷阱就是,假如是-0.003,會輸出成-0.00,所以最後要檢查

#include<stdio.h>
#include<string.h>
int main()
{
    char s[110]={'\0'};
    int i;
    int sum=0;

    while(scanf("%s",s)!=EOF)
    {
        for(i=0;s[i]!='.';i++);

        if(s[i+2]=='\0')
            s[i+2]='0';

        if(s[i+3]>'4')
            s[i+2]++;

        s[i+3]='\0';

        for(i=i+2;i>=0;i--)
        {
            if(s[i]!='.'&&s[i]!='-')
            {
                if(s[i]=='9'+1)
                {
                    s[i]='0';

                    //還在小數 
                    if(s[i-1]!='.')
                        s[i-1]++;
                    else
                        s[i-2]++;
                }
            }    
        }

        if(strcmp(s,"-0.00")==0)
            printf("0.00\n");
        else 
            printf("%s\n",s);
    }
}