讀入乙個正整數 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...