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