在C语言中负数可以参加运算吗,为什么num<0时,num还要变成正数参与运算

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“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://ask.csdn.net/questions/7447007
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:编写程序,输入若干个整数,整数间用空格分隔,输入0代表输入结束,输出这些整数中所有奇数之和
  • 除此之外, 这篇博客: (C语言)写几个函数,1.输入10个职工的姓名和职工号2.按职工号由小到大顺序排序,姓名顺序也随之调整3.要求输入一个职工号,用折半查找找出该职工的姓名,从主函数输入要查找职工号,输出该职工姓名.中的 写几个函数,1.输入10个职工的姓名和职工号2.按职工号由小到大顺序排序,姓名顺序也随之调整3.要求输入一个职工号,用折半查找找出该职工的姓名,从主函数输入要查找职工号,输出该职工姓名. 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    也可以输入职工姓名查询 , 输出职工号
    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");
    }
    
    
    

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^