社区讨论

85分,特殊值都应该处理过了,求大佬调

P1553数字反转(升级版)参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhk77myy
此快照首次捕获于
2025/11/04 14:39
4 个月前
此快照最后确认于
2025/11/04 14:39
4 个月前
查看原帖
C
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
void quchu(char str[30]);
int main(void)
{
    char num[30];
    scanf("%s",num);
    //获得数组长度
    int length = 0;
    for(int i = 0 ; num[i] ; i ++)
    {
        length++;
    }
    //分类讨论
    for(int i = 0 ; num[i] ; i ++)
    {
        if(num[i] == '.')//小数
        {
            //把小数前,小数后分成两段,分别颠倒并去0
            //分成两个数组,分别进行操作
            int length1 = i;  //获得整数的数量
            int length2 = length - length1 - 1;//获得小数数字的数量
            char zheng[length1+1];
            char xiao[length2+1];
            
            for(int j = 0 ; j < length1 ; j ++)
            {
                zheng[j] = num[length1 - 1 - j];//翻转整数
            }
            zheng[length1] = '\0';
            quchu(zheng);
            
            for(int j = 0 ; j < length2 ; j ++)
            {
                xiao[j] = num[length-1-j];//翻转小数
            }
            xiao[length2] = '\0';
            //小数部分只有0

            //去除小数部分多余的0
            int last = length2 - 1;
            while(last >= 0 && xiao[last] == '0')
            {
               last--;
            }
            xiao[last + 1] = '\0';  // 直接截断字符串
            if(last+1 == 0)
            {
                xiao[last+1] = '0';
                xiao[last+2] = '\0';
            }
            printf("%s",zheng);
            printf(".");
            printf("%s",xiao);
            
            return 0;
        }
        if(num[i] == '/')//分数
        {
            int length1 = i;  //获得整数的数量
            int length2 = length - length1 - 1;//获得小数数字的数量
            char zheng[length1+1];
            char xiao[length2+1];
            
            for(int j = 0 ; j < length1 ; j ++)
            {
                zheng[j] = num[length1 - 1 - j];//翻转整数
            }
            zheng[length1] = '\0';
            quchu(zheng);
            
            for(int j = 0 ; j < length2 ; j ++)
            {
                xiao[j] = num[length-1-j];//翻转小数
            }
            xiao[length2] = '\0';
            quchu(xiao);
            printf("%s",zheng);
            printf("/");
            printf("%s",xiao);
            return 0;
        }
        if(num[i] == '%')//百分数
        {
            char result1[30];
            for(int j = 0 ; j < i ; j ++)
            {
                result1[j] = num[i-1-j];
            }
            result1[i] = '\0';
            
            quchu(result1);
            printf("%s",result1);
            printf("%%");
            return 0;
        }
    }
    //都没有(整数)
    char result1[30];
    for(int i = 0 ; i < length ; i ++)
    {
        result1[i] = num[length-1-i];
    }
    result1[length] = '\0';
    quchu(result1);
    printf("%s",result1);
    return 0;

}
void quchu(char str[30])
{
    int number = atoi(str);
    sprintf(str,"%d",number);
}

回复

2 条回复,欢迎继续交流。

正在加载回复...