数字反转(升级版)

来源:互联网 发布:vue.js可视化表单设计 编辑:程序博客网 时间:2024/06/10 10:06

题目来源:洛谷
http://www.luogu.org/problem/show?pid=1553
题目:给定一个数,请将该数各个位上数字反转得到一个新数。
这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数之改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为0(除非小数部分除了0没有别的数,那么只保留1个0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为0),本次没有负数。
题目分析:这道题不难,但是稍微有点麻烦,需要细心,毕竟暑假里还是有点烦躁的。

# include <iostream># include <string.h>using namespace std;    int main(){    int n=-1;    char a[50];    char b[50];    char t;    char ch='a';    cin>>a;    int lena=strlen(a),lenb;    for(int i=0;i<lena;i++)    {            if(a[i]=='/')            {                ch='/';                n=i;            }            else if(a[i]=='.')            {                ch='.';                n=i;            }            else if(a[i]=='%')                ch='%';    }    if(ch=='a')    {        lena--;        while(a[lena]=='0')        {            a[lena]='\0';            lena--;        }        if(lena==-1)            a[0]='0';        lena=strlen(a);        for(int i=0;i<lena/2;i++)        {            t=a[i];            a[i]=a[lena-i-1];            a[lena-i-1]=t;        }        cout<<a<<endl;    }    else if(ch=='/'||ch=='.')    {        strcpy(b,a+n+1);        a[n]='\0';        lena=strlen(a)-1;        while(a[lena]=='0')        {            a[lena]='\0';            lena--;        }        if(lena==-1)            a[0]='0';        while(b[0]=='0')        {            strcpy(b,b+1);        }        lena=strlen(a);        lenb=strlen(b);        if(lenb!=0)            lenb--;        while(b[lenb]=='0')        {            b[lenb]='\0';            lenb--;        }        lenb=strlen(b);        if(lenb==0)            b[0]='0';        for(int i=0;i<lena/2;i++)        {            t=a[i];            a[i]=a[lena-i-1];            a[lena-i-1]=t;        }        for(int i=0;i<lenb/2;i++)        {            t=b[i];            b[i]=b[lenb-i-1];            b[lenb-i-1]=t;        }        cout<<a<<ch<<b<<endl;    }    else if(ch=='%')    {        a[lena-1]='\0';        lena=lena-2;        while(a[lena]=='0')        {            a[lena]='\0';            lena--;        }        if(lena==-1)            a[0]='0';        lena=strlen(a);        for(int i=0;i<(lena)/2;i++)        {            t=a[i];            a[i]=a[lena-i-1];            a[lena-i-1]=t;        }        cout<<a<<ch<<endl;    }    return 0;}

代码还是比较长的……

1 0
原创粉丝点击