版权声明:本文为博主原创文章,转载请务必注明出处和作者,谢谢合作! https://blog.csdn.net/zhanshen112/article/details/84308488
题目
1002 写出这个数 (20 point(s))
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 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;
}