75分求助
查看原帖
75分求助
1101832
dkp339楼主2024/4/20 06:57

前五个测试点全红了,好像都是正整数的情况,但是我在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;
}
2024/4/20 06:57
加载中...