Test Message

d098: Stringstream運用練習(C++)

內容

小明為了要保證資料傳輸的隱密性,為檔案設置了一個加密金鑰,並且將金鑰藏進了一個檔案裡。收到檔案的小風得知要解譯出他所使用的加密金鑰,必須將檔案裡所有不含非數字的單字找出,加起來就是加密金鑰。可是,要求出這個金鑰,如果自己慢慢加實在是太慢了,所以請你寫一個程式來幫助他吧!


輸入

每組測資有一行,內含多個單字,每個單字之間會以空格作分隔(每一行的前後都有可能有空格,且分隔單字的空格可能不只一個)。

zerojudge 萬歲
1a6f 6 65afd 15s 1sa 12 115

輸出

請求出所有僅含數字的單字,並且加總後輸出。這些數字的總和不會超過 2 的 16 次方。

0
133


解題思路

先實作一個字串轉整的函式,如果讀到非數字字元回傳 0 ,若皆為數字則回傳轉換後的數字。

將測資用空白分割成各筆資料,再用上面實作的函式轉換各筆資料並將其加入總和,測資結束後輸出總和即可。


完整程式碼

AC (2ms, 80KB)
#include <stdio.h>
#include <string.h>

int sum;
char input[1000], * tok;

inline int getInt(char src[])
{
int res = 0;
for (int i = 0; src[i]; i++)
{
if (src[i] >= '0' && src[i] <= '9')
res = (res << 3) + (res << 1) + (src[i] - '0');
else
return 0;
}
return res;
}

int main()
{
while (gets(input) != NULL)
{
sum = 0, tok = strtok(input, " ");
while (tok != NULL)
{
sum += getInt(tok);
tok = strtok(NULL, " ");
}
printf("%d\n", sum);
}
return 0;
}