PAT B1002 寫出這個數(C )

2021-09-10 09:25:41 字數 1970 閱讀 7445

1002 寫出這個數 (20 分)

讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。

每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10​^100​​。

在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。

1234567890987654321123456789
yi san wu
本題可分為三步思考解決方案:

將讀入的數字串識別為多個一位數字;

將各個數字加起來得到所求和;

將和的各位數字分離,分別轉換為拼音輸出。

本題解決思路:

用字元陣列(n[100])來儲存輸入的數字串,如題意,這裡保證n小於100位;

此時 n[i] 中存放的是字元 '1' '2' '3',所以需要將其轉換為數字 1 2 3,以便求和(利用ascii碼差48求得);

迴圈累加求和,因為字串末尾預設有 『\0』,故使用 '\0' 做結束標識;

利用求餘(%)將和的各位數字記錄進陣列(su[4])中;

對於每一位數字,呼叫printnum函式,輸出拼音。

#include#includeusing namespace std;

void printnum(int n);

int main();

char n[100]=;

//printf("please input a num:\n");

scanf("%s",n);

for(i=0;n[i]!='\0';i++)//get sum

//store reversesum in su[4] ,maxsum is 900

//such as sum=345 su[4]=

i=0;

while(sum)

//print output

//printf("this is answer:\n");

while(i--)

return 0;

}void printnum(int n)

}

其他函式寫在主函式後面時,記得在前面宣告函式。

注意儲存的是字元還是數字,如果不進行轉換為數字,則將以字元的ascii碼進行計算。

將乙個int型整數倒序輸出,即輸入「1234」,輸出「4321」。

【思路】可以用 「a%10」 的辦法得到該整數的個位,用初始值為0的變數s記錄倒序的數,如圖1所示。

【**】利用迴圈得到倒序:

//non-recursion

int reverseint(int a)

return s;

}

【思路】遞迴應有 「遞迴體」 和 「遞迴出口」:

【思路】如果僅需輸出此數,則可將各數字按單獨位數輸出,即實際輸出 '3''2''1',而不是 '321' 。

【**】

//another method

void reversestring(int a)

printf("\n");

}

- end -

PAT B1002寫出這個數

讀入乙個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。輸入格式 每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100。輸出格式 在一行內輸出n的各位數字之和的每一位,拼音數字間有1空格,但一行中最後乙個拼音數字後沒有空格。輸入樣例 1234567890987654...

PAT B1002 寫出這個數

讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10 100 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。123456789098765432...

PAT B1002 寫出這個數

1002 寫出這個數 20 分 讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10 100 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。yi...