1002 寫出這個數 20 分

2021-09-27 06:37:05 字數 1620 閱讀 1629

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

輸入格式:

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

輸出格式:

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

輸入樣例:

1234567890987654321123456789

輸出樣例:

yi san wu

思路:計算出和(sum)後,因為不知道具體位數,所以從sum的末位往前開始,分別放入陣列num2中,再將num2中元素從後往前輸出對應字串

**如下:(改進**在最後)

#include #include using namespace std;

char pingying[10] = ;

int main()

//cout << sum << endl;

int num2[10], n = 0; //倒著存放sum的各位數

int n2 = sum, n1 = sum;

while (0 != n1)

for (int i = n-1; i > 0; i--)

cout << pingying[num2[0]];

}

題很簡單,但是寫了很久,很多東西全忘了,出現如下錯誤

錯誤1 c2040 「num」:「int [10]」與「std::string」的間接定址級別不同

原因:同名string陣列和int陣列

解決:將int陣列更改為num2

錯誤2 一開始嘗試將pingying陣列設定為字串陣列(string型別)

原因:不熟悉string陣列的初始化方法

解決:用二維char陣列

備註:可在開乙個帖子詳細說明string型別

錯誤3:直接將乙個整數(sum)賦值給乙個string型別行不通

反思:考試時應該用所能想到的最快的方法解題,不需要花時間想能不能減少一兩行**的問題,不值得

**改進:

用string陣列方便一點,像普通陣列一樣輸出就行

初始**中因為不知道和(sum)的位數,所以從sum的末位往前面判斷

更改:題中說n不大於10的100次方,也就是說n最多有100位,每位最大為9,所以和(sum)最大為900,不超過三位數

改進**如下:

#include #include using namespace std;

string pingying[10] = ;

int main()

int n1 = sum / 100 % 10, n2 = sum / 10 % 10, n3 = sum % 10; //n1 n2 n3 分別為sum的百 十 個位

if(!(n1 == 0))

if(!(n1 == 0 && n2 == 0))

cout << pingying[n3];

}

1002 寫出這個數(20 分)

think 嗯。好久沒寫。隨便找個 水題寫吧。我直接跑計算,然後根據map進行輸出。讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。輸入格式 每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10 100 輸出格式 在一行內輸出 n 的各位數字之和的...

1002 寫出這個數 (20 分

題目1002 讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。輸入格式 每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。輸出格式 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。輸入樣例 1234567890987...

1002 寫出這個數 20 分

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