前五个测试点全红了,好像都是正整数的情况,但是我在devcpp上测试测试点1的数据是对的
代码如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void int_reverse(char *number, char *end_position) {
//把字符串末尾的零去掉,同时找到数字的位数
long long level = end_position - number + 1;
while(number[level - 1] == '0') {
level--;
}
//反转
if(level == 0) {
printf("0");
}
else {
for(int i = level - 1; i >= 0; i--){
printf("%c", number[i]);
}
}
//注意没有换行,使用的时候注意
}
void decimal_reverse(char *number) {
//找到小数点位置
char *point_position = strstr(number, ".");
char *end_position = number + strlen(number) - 1;
//在小数点之前和之后分别使用整数反转
int_reverse(number, point_position - 1);
printf(".");
//把前面的零去
int i = 1;
while(*(point_position + i) == '0' && *(point_position + i + 1) !='\0') {
i++;
}
if(*(point_position + i) == '0') {
printf("0");
}
else {
int_reverse(point_position + i, end_position);
}
printf("\n");
}
void fraction_reverse(char *number) {
//找到/的位置
char *division_position = strstr(number, "/");
char *end_position = number + strlen(number) - 1;
//同理
int_reverse(number, division_position - 1);
printf("/");
int_reverse(division_position + 1, end_position);
printf("\n");
}
void percent_reverse(char* number) {
//找到%的位置
char *percent_position = strstr(number, "%");
//反转前面的数字
int_reverse(number, percent_position - 1);
printf("%c",'%');
printf("\n");
}
int main(void) {
char number[21];
scanf("%s", number);
//查找符号
if(strstr(number, ".") != NULL) {
decimal_reverse(number);
}
else if(strstr(number, "/") != NULL) {
fraction_reverse(number);
}
else if(strstr(number, "%") != NULL) {
percent_reverse(number);
}
else {
int_reverse(number, number + strlen(number));
printf("\n");
}
return 0;
}