输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“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>
int main()
{
int num;
scanf_s("%d", &num);
if (num < 0)
{
printf("fu ");
num *= -1;
}
int t = num;
int mask = 1;
int i;
int n = 0;
while (t > 9)
{
t /= 10;
n++;
mask *= 10;
}
for (i = 0; i <= n; i++)
{
int d = num / mask;
switch (d) {
case 0:printf("ling"); break;
case 1:printf("yi"); break;
case 2:printf("er"); break;
case 3:printf("san"); break;
case 4:printf("si"); break;
case 5:printf("wu"); break;
case 6:printf("liu"); break;
case 7:printf("qi"); break;
case 8:printf("ba"); break;
case 9:printf("jiu"); break;
}
num %= mask;
if (mask > 9)
printf(" ");
mask /= 10;
}
}
符号单独标记,后面的转成正数,不然后面的switch 对不上,不转换正数后面switch 还需要写负数情况。
以下是Python实现该功能的代码:
num = input()
pinyin = ""
# 处理负数
if num[0] == "-":
num = num[1:]
pinyin += "fu "
# 处理每个数字
for digit in num:
if digit == "0":
pinyin += "ling "
elif digit == "1":
pinyin += "yi "
elif digit == "2":
pinyin += "er "
elif digit == "3":
pinyin += "san "
elif digit == "4":
pinyin += "si "
elif digit == "5":
pinyin += "wu "
elif digit == "6":
pinyin += "liu "
elif digit == "7":
pinyin += "qi "
elif digit == "8":
pinyin += "ba "
elif digit == "9":
pinyin += "jiu "
else:
pinyin += digit + " "
print(pinyin[:-1])
首先读入一个整数,然后根据题目要求进行处理。如果整数是负数,则在拼音前加上“fu”。然后遍历整数的每一位数字,根据数字的不同添加对应的拼音。最后输出拼音字符串,注意要去掉末尾的空格。
不知道你这个问题是否已经解决, 如果还没有解决的话:也可以输入职工姓名查询 , 输出职工号
https://blog.csdn.net/qq_41071068/article/details/90314040
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
struct staff {//创建结构体变量
int id;//职工号
char name[1024];//姓名
};
void input(struct staff* p) {//输入职工的姓名和职工号
struct staff* q = p;
for (int i = 1; p < q + N; ++i, ++p) {
printf("请输入第%d个职工的职工号\n",i);
scanf("%d",&p->id);
printf("请输入该职工的姓名\n");
scanf("%s", p->name);//p->name本来就是指针,存放的就是地址,无需取地址
}
}
void sort(struct staff* p) {//按职工号从大到小排序
char temp[1024];
struct staff* q = p;
for (; p < q + N; ++p) {
for (struct staff* qq= p + 1;qq < q + N; ++qq) {
if (p->id > qq->id) {
p->id = p->id ^ qq->id;//按位异或法
qq->id = p->id ^ qq->id;
p->id = p->id ^ qq->id;
strcpy(temp, p->name);
strcpy(p->name, qq->name);
strcpy(qq->name, temp);
}
}
}
}
struct staff* bisearch(int n, struct staff* p) {//查找是否有职工号为n的职工(二分查找)
int left = 0;
int right = N - 1;
int mid;
struct staff* Mp;
while (left <= right) {
mid = (left + right) / 2;
Mp = p + mid;
if (n == Mp->id) {
return Mp;//有则返回这个id所对应的指向结构体数组的指针Mp
}
else if (n > Mp->id) {
left = mid + 1;
}
else if (n < Mp->id) {
right = mid - 1;
}
}
return NULL;//无则返回空指针
}
void main() {
int n;
struct staff staff[N];//创建N个结构体变量
struct staff* p;//创建指向结构体
p = staff;//指向结构体数组的首元素
input(p);
system("cls");
sort(p);
//该段代码可以检测排序是否成功
for (; p < staff + N; ++p) {
printf("%d\t%s\n", p->id, p->name);
}
p = staff;
//
printf("请输入需要查询的员工号\n");
scanf("%d", &n);
struct staff* q = bisearch(n, p);
if (q != NULL) {
printf("职工号为%d的职工姓名为:%s\n", q->id, q->name);
}
else {
printf("没有职工号为%d的员工\n", n);
}
system("pause");
}