社区讨论
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 条回复,欢迎继续交流。
正在加载回复...