1. 程式人生 > >(PAT乙級)1002. 寫出這個數 (20)

(PAT乙級)1002. 寫出這個數 (20)

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

輸入格式:每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100

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

輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu

n小於10^100,那麼他們的和肯定是三位數以內啦,這樣就很簡單了。

我們先按字串輸入,然後將每個數字儲存到數組裡面,求和就可以啦,然後計算個十百位分別是什麼數字,輸出就好了...

很常規的解法,如果大家有更好的方法歡迎討論^_^

AC程式碼:

#include <iostream>
#include <string>
using namespace std;
string chinese[10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
int convert(string s)
{
	int n,sum;
	sum = 0;
	n = s.size();
	int *a = new int[n];
	for (int i = 0; i < n; i++)
	{
		a[i] = s[i] - '0';
		sum += a[i];
	}
	return sum;
}

int main()
{
	string s;
	int p[3];
	cin >> s;
	int sum;
	int count = 0;
	sum = convert(s);
	int tmp;
	tmp = sum;
	while (tmp > 0)
	{
		tmp = tmp / 10;
		count++;
	}
	switch (count)
	{
	case 1:
		cout << chinese[count];
		break;
	case 2:
		p[0] = sum / 10;
		p[1] = sum % 10;
		cout << chinese[p[0]] << " " << chinese[p[1]];
		break;
	default:
		p[0] = sum / 100;
		sum = sum % 100;
		p[1] = sum / 10;
		p[2] = sum % 10;
		cout << chinese[p[0]] << " " << chinese[p[1]] << " "<<chinese[p[2]];
		break;
	}
	return 0;
}