2018年4月13日 星期五

程式設計--UVA11332

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char n[11];
    while(scanf("%s",n)!=EOF && n[0]!=48)
    {                         
        while(strlen(n)!=1)
        {
            int i=0,F=0;
            for(i=0 ; i<strlen(n) ; i++)
            F+=(n[i]-48);
            memset(n,'\0',11);                  //清空n字元陣列
            sprintf(n,"%d",F);                 //把新的F數字帶入n字元陣列

        }
        printf("%s\n",n);
    }
    return 0;
}

題目網址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=25&problem=2307&mosmsg=Submission+received+with+ID+21130643

原本我是要用數字陣列,然後用/跟%把數字切成一塊一塊放進去,但好像會有溢位的問題,看書的解法是字元陣列來處理,感覺聰明的多,雖然格式化字串有點不太懂

我覺得重要的概念:
*memset(A,B,C)
這個函式會把A陣列裡的前C個字元,都換成B
*sprintf(A,B,C)
A是要輸出的格式化字串
B和C配合,B是輸入格式,C是要轉化的東西
如程式碼中的F要以%d的單位轉為字元陣列輸出
*用字元陣列處理數字,在格式化輸出

參考:
memset
https://pydoing.blogspot.tw/2010/07/c-memset.html
sprintf
https://pydoing.blogspot.tw/2010/07/c-sprintf.html
http://www.musicmaniactw.com/2009/10/sprintf.html



沒有留言:

張貼留言