7-25 念数字 (15 分)
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:
输入在一行中给出一个整数,如:1234。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。
输入样例:
-600
输出样例:
fu liu ling ling
因为入门时间不长,所以我的代码比较麻烦
如下
#include<stdio.h>
#define N 100
int main ()
{
int t;
int n=0;
int i=0;
int x=0;
int j;
int len=0;
scanf("%d",&n);
if(n<0)
{
printf("fu ");
n=-n;
}
int a [100];
while(n)
{
a[x]=n%10;
x++;
n/=10;
}
for(i=0,j=x-1;i<j;i++,j--){
int tmp = a[i];
a[i]=a[j];
a[j]=tmp;
}
for(i=0;i<=x-2;i++)
{
if(a[i]==0)
printf("ling ");
else if(a[i]==1)
printf("yi ");
else if(a[i]==2)
printf("er ") ;
else if(a[i]==3)
printf("san ");
else if(a[i]==4)
printf("si ");
else if(a[i]==5)
printf("wu ");
else if(a[i]==6)
printf("liu ");
else if(a[i]==7)
printf("qi ");
else if(a[i]==8)
printf("ba ");
else if(a[i]==9)
printf("jiu ");
}
i=x-1;
if(a[i]==0)
printf("ling");
else if(a[i]==1)
printf("yi");
else if(a[i]==2)
printf("er") ;
else if(a[i]==3)
printf("san");
else if(a[i]==4)
printf("si");
else if(a[i]==5)
printf("wu");
else if(a[i]==6)
printf("liu");
else if(a[i]==7)
printf("qi");
else if(a[i]==8)
printf("ba");
else if(a[i]==9)
printf("jiu");
return 0;
}
这里一开始我定义了数组为字符型的,当实际运行后发现,字符型的输出是空格,不会把数字存到数组里面,因为数字是整数型的,所以我把字符型的数组改成了整数型的数组,然后测试成功,这里的==和=容易混淆,需要及时区分
另外
我第一次提交答案是错误的,因为我没用第二个判断,我直接执行了for循环然后最后一位的答案后面多一个空格,后来修改成上面的代码;
当然学长看到我的代码说这个代码实在太麻烦了,不是一个好的代码,他的代码如下
#include<stdio.h>
#define N 100
char in[][5] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
int t,n ,i,x,j;
int main(){
scanf("%d", &n);
if (n == 0)printf("ling");
if (n < 0)
printf("fu ");
n = abs(n);
char a[100];
for (; n; n /= 10)
a[x++] = n % 10 + '0';
for (i = x-1; i >= 0; i--)
if (i==x-1) printf("%s", in[a[i] - '0']);
else printf(" %s",in[a[i] - '0']);
return 0;
}
他首先定义了一个字符型的二维数组并把这几个拼音输入到里面
如果===0输出ling
如果他小于0就输出fu
并用函数将n取正
定义了长度为100的数组
‘0’应该是空格的意思在这个数组里面
并且x是声明的全局变量
在全局变量中如果没有给出他的初始值那么他的初始值就是0
然后后面的这一串代码目前我还没有看懂
等待后期补充