1. 程式人生 > >1002 寫出這個數——C++實現

1002 寫出這個數——C++實現

題目

1002 寫出這個數 (20 point(s))

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

輸入格式:

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

輸出格式:

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

輸入樣例:

1234567890987654321123456789

輸出樣例:

yi san wu

演算法

由於輸入的字元長度很大,顯然不能使用數值型進行儲存。字元型儲存可以處理大量的字元。讀取之後,只需要將每一位的數字字元轉換成數字,進行累加即可。累加之後,將對應的數字形式轉化為字元,再直接和預定義的字串進行比對,輸出即可。主要考察的還是數字字元與數字本身之間的相互轉化。

程式碼

下面是學習過C++寫的程式碼

//1002 寫出這個數 v1
#include <iostream> 
#include <string>
using namespace std;

int main(){
	string s;	cin>>s;
	int sum=0;
	for(int i=0;i<s.length() ;i++)	sum+=s[i]-'0';
	string str=to_string(sum);
	string chaxun[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
	for(int i=0;i<str.length() ;i++){
		if(i) cout<<" ";
		cout<<chaxun[str[i]-'0'];
	}	
	return 0;
}

下面是隻學過C語言寫的程式碼,可以看出來C++字串的易用性。

//1002
#include <stdio.h>
#define M 5
#define N 100

int main()
{
	char numchar[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};	//save the pinyin
	char array[N];	//save the user's input
	int index[M];	//save the sum's numbers
	int i=0,j,sum=0;
	
	for(i=0;i<M;i++)
	index[i]=-1;
	scanf("%s",array);
	
	i=0;
	while(array[i]!='\0'){	//count the sum
		sum+=array[i]-'\0';
		i++;
	}
	
	j=0;
	while(sum>0){	//count bai shi ge
		index[j]=sum%10;
		sum=sum/10;
		j++;
	} 
	for(i=M-1;i>=0;i--){
		if(index[i]!=-1){  
			if(i==0)
			printf("%s",numchar[index[i]]);
			else
			printf("%s ",numchar[index[i]]);
		}
	}
	return 0;
}