#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的單位轉為字元陣列輸出
*用字元陣列處理數字,在格式化輸出
如程式碼中的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
沒有留言:
張貼留言