题目:
样例输入输出:
代码:
方法1:利用整型转字符串获取长度
#include <iostream>
#include <cmath>
#include <sstream>
using namespace std;
int a[32];
int i2s(int num,string &s){//将整型转为字符型,获取相应长度并返回
stringstream ss;
ss<<num;
ss>>s;
return s.length();
}
void n2a(int n){//将每位数字存到数字a中
string str;
while(n!=0){
for(int i=i2s(n,str)-1;i>=0;--i){
a[i]=n%10;
n/=10;
}
}
}
void show(int n){//输出
n2a(n);
string s;
int i=0;
while(i<i2s(n,s)){
switch(a[i++])
{
case 0:
cout<<"ling";
break;
case 1:
cout<<"yi";
break;
case 2:
cout<<"er";
break;
case 3:
cout<<"san";
break;
case 4:
cout<<"si";
break;
case 5:
cout<<"wu";
break;
case 6:
cout<<"liu";
break;
case 7:
cout<<"qi";
break;
case 8:
cout<<"ba";
break;
case 9:
cout<<"jiu";
break;
default:
cout<<"erro";
}
if(i!=i2s(n,s)){
cout<<" ";//最后一个没空格
}
}
}
int main(){
int n;
cin>>n;
if(n>0){
show(n);
}else if(n<0){
cout<<"fu"<<" ";
show(abs(n));//负数取绝对值
}else{
cout<<"ling"<<endl;
/*虽然不考虑为0的情况答案也是正确的,但是逻辑上有问题,只是由于数组默认值为0。
然后我们输出时,使用i2s函数获取数组长度为1,导致输出正常。
为了使逻辑正常,我们将0当成单独一种情况考虑
*/
}
return 0;
}
方法2:取模获取长度
#include <iostream>
#include <cmath>
using namespace std;
int a[32];
int getlen(int n){//获取长度
int ans=0;
for(int i=1;i<=11;i++){
n/=10;
if(n==0){
ans=i;
break;
}
}
return ans;
}
void n2a(int n){//将每位数字存到数字a中
while(n!=0){
for(int i=getlen(n)-1;i>=0;--i){
a[i]=n%10;
n/=10;
}
}
}
void show(int n){//输出
n2a(n);
int i=0;
while(i<getlen(n)){
switch(a[i++])
{
case 0:
cout<<"ling";
break;
case 1:
cout<<"yi";
break;
case 2:
cout<<"er";
break;
case 3:
cout<<"san";
break;
case 4:
cout<<"si";
break;
case 5:
cout<<"wu";
break;
case 6:
cout<<"liu";
break;
case 7:
cout<<"qi";
break;
case 8:
cout<<"ba";
break;
case 9:
cout<<"jiu";
break;
default:
cout<<"erro";
}
if(i!=getlen(n)){
cout<<" ";//最后一个没空格
}
}
}
int main(){
int n;
cin>>n;
if(n>0){
show(n);
}else if(n<0){
cout<<"fu"<<" ";
show(abs(n));//负数取绝对值
}else{
cout<<"ling"<<endl;
}
return 0;
}