1002 写出这个数——C++实现

版权声明:本文为博主原创文章,转载请务必注明出处和作者,谢谢合作! https://blog.csdn.net/zhanshen112/article/details/84308488

题目

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;
}

猜你喜欢

转载自blog.csdn.net/zhanshen112/article/details/84308488