【題解】Luogu P1307 【数字反转】

这题如果会字符串相关的处理将会非常简单

为何一大堆人的题解都这么麻烦

首先我们得知道几个关于字符串的函数

See Also https://www.luogu.org/blog/Cinema/sscanf-sprintf

reverse(),位于STL中,是一个用于反转数组的函数
ssprintf() & sscanf(),位于cstdio/stdio.h中,用于将变量输入到char[]或将char[]转换为相应变量

strlen()/reverse()/ssprintf()/sscanf()

首先写一个函数

int change(int number);

/*
*@author Cinema 17-12-29

*@version 1.1

*@description change函数用于对int类型的数字进行反转,会自动处理掉前导0,

*@args int number,需要反转的数

*@return 反转后的数,会处理前导0和负数

*/

int change(int number){

    bool isMinus = false;//判断是否是负数 

/*
*@description 若number<0,则将其转化成正数处理,并将isMinus设为true,若为0,直接return 0

*/

        if(number < 0){
            number = -number;
            isMinus = true;
        }else if(number == 0){
            return 0;
        }

/*
*@description delta[]用于接收number,changedNumber是return的值

*/

    char delta[100];

    int changedNumber = 0;

/*
*@description 将number转化为char[]

     \*@see-also sprintf() reverse() sscanf()

*/

    sprintf(delta,"%d",number);

/*
*@description reverse()用于反转delta[]

*/

    reverse(delta,delta + strlen(delta));

/*
*@description 将反转后的数输出到changedNumber中,sscanf()会自动处理前导0

*/

    sscanf(delta,"%d",&changedNumber);

/*
*@description 判断正负并return

*/

        if(isMinus){
            return -changedNumber;
        }else{
            return changedNumber;
        }
    }

这个是1.1的版本,原来1.0的时候还不知道有reverse()这么好用的函数,所以1.0就写的很烦琐,故就不献丑了。

完整程序(已去除注释):

    #include<cstdio>
    #include<cstring>
    #include<algorithm> 
    using namespace std;
    int change(int number){
        bool isMinus = false;
        if(number < 0){
            number = -number;
            isMinus = true;
        }else if(number == 0){
            return 0;
        }
        char delta[100];
        int changedNumber = 0;
        sprintf(delta,"%d",number);
        reverse(delta,delta + strlen(delta));
        sscanf(delta,"%d",&changedNumber);
        if(isMinus){
            return -changedNumber;
        }else{
            return changedNumber;
        }
    }
    int main(){
        int number;
        scanf("%d",&number);
        printf("%d",change(number));
        return 0;
}