社区讨论

85分!求助!

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

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mi4g9urb
此快照首次捕获于
2025/11/18 18:48
4 个月前
此快照最后确认于
2025/11/18 18:48
4 个月前
查看原帖
CPP
#include<stdio.h>
#include<string.h> 
char a[30];
int len;
void swap(char *p1,char *p2)
{   
    if(p1>=p2) return;
    else if(*p2=='%') p2--;
    char temp;
    while(1)
    {
        temp=*p1;*p1=*p2,*p2=temp;
        p1++;p2--;
        if(p1>=p2) break;
    }
}
int main()
{   
    int fu=0;//0为正数,1为负数 
    scanf("%s",a);
    if(a[0]=='-') 
    {
       fu=1;
       printf("-");    
    }
    char *p1,*p2;
    if(fu==0) p1=&a[0];
    else p1=&a[1];//p1指向非符号位第一个 
    len=strlen(p1);
    if(len==1&&*p1=='0') 
    {
        printf("0\n");
        return 0;
    }
    p2=strchr(p1,'.');
    if(p2==NULL) 
    {
        p2=strchr(p1,'/');
        if(p2==NULL)
            p2=p1+len-1;
}//若为小数或分数,p2指向符号;若为正数或百分数,p2指向数组最后一个元素
CPP
    if(p2==p1+len-1)
    {   
        swap(p1,p2);
        for(;p1<=p2;p1++)
           if(*p1!='0') break;
        for(;p1<=p2;p1++) printf("%c",*p1);
    }
    else
    {   
        swap(p1,p2-1);
        swap(p2+1,p1+len-1);
        char *begin,*end;begin=p1,end=p1+len-1;
         while(1)
             if((*begin!='0')||begin==p2-1)
               break;
             else begin++;
        while(1)
            if((*end!='0')||end==p2+1)
               break;
            else end--;
        for(;begin<=end;begin++)
           printf("%c",*begin);
    }
    return 0;
}

回复

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

正在加载回复...