社区讨论

0分re wa本机结果正确 代码已手动缩进,附注释

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

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mi4eszka
此快照首次捕获于
2025/11/18 18:07
4 个月前
此快照最后确认于
2025/11/18 18:07
4 个月前
查看原帖
CPP
#include<stdio.h>
int main()
{
        char st[22];
        int mark, i, flag, num;
        for (i = 0,mark=-1;; i++)
        {
                scanf("%c", &st[i]);
                if (st[i] == '\n')
                { 
                          if (mark == -1)mark = i;//输入的是整数,mark指向\n(最后一个数的后一位)
                          break; //
                }
                if (st[i] == '%' || st[i] == '.' || st[i] == '/')
                    mark = i;//mark指向符号所在位置
        }
        num = i;//num记录一共有多少个字符,用于后面程序中,判断是否输入的是整数
        flag = 1;//用于清除有效数字之前的0
        for (i = mark - 1; i >= 0; i--)
        {
                 if (flag)
                 {
                          if (i == 0)printf("%c", st[i]);//如果只有一个0,则需要输出
                          else if (st[i] != '0')
                          { 
                                  flag = 0; //表示此时已经有有效数字,可以输出0了
                                  printf("%c", st[i]);//输出这个有效数字
                          }
                 }
                 else
                 {
                          printf("%c", st[i]);
                 }
        }
        if (mark != num)//输入的不是整数
        {
                 printf("%c", st[mark]);//输出符号% / .
                 if (st[mark] == '.')
                 {
                         for (i = mark + 1; i < num; i++)//找到小数点后的第一个有效位
                        {
                                  if (st[i] != '0'){ mark = i - 1; break; }
                        }
                        for (i = num - 1; i > mark;i--)//比如 1.002输出应为1.2
                                 printf("%c", st[i]);
                 }
                else//输入为分数或百分数的情况
                {
                        flag = 1;
                        for (i = num - 1; i >mark; i--)//百分数不会有输出,可以说这就是针对输入为分数的情况
                        {
                                 if (flag)//找到第一个有效位,之前的0不输出
                                 {
                                          if (st[i] != '0'){ flag = 0; printf("%c", st[i]); }//如:2/100输出为2/1
                                 }
                                 else
                                 {
                                           printf("%c", st[i]);
                                 }
                         }
                 }
        }
        printf("\n");
}

回复

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

正在加载回复...