zoukankan      html  css  js  c++  java
  • 洛谷 P1553 数字反转(升级版)

    题目描述

    给定一个数,请将该数各个位上数字反转得到一个新数。

    这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数只改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为0(除非小数部分除了0没有别的数,那么只保留1个0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为0),本次没有负数。

    输入输出格式

    输入格式:

     

    一个数s

     

    输出格式:

     

    一个数,即s的反转数

     

    输入输出样例

    输入样例#1: 复制
    ①
    5087462
    ②
    600.084
    ③
    700/27
    ④
    8670%
    输出样例#1: 复制
    ①
    2647805
    ②
    6.48
    ③
    7/72
    ④
    768%

    说明

    所有数据:25%s是整数,不大于20位

    25%s是小数,整数部分和小数部分均不大于10位

    25%s是分数,分子和分母均不大于10位

    25%s是百分数,分子不大于19位

    (20个数据)

    思路:模拟。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    char s[25];
    int flag1,flag2;
    int len,pos=-1;
    int main(){
        scanf("%s",s);
        len=strlen(s);
        for(int i=0;i<len;i++)
            if(s[i]<'0'||s[i]>'9'){ pos=i;break; }
        if(pos!=-1&&s[pos]!='%'){
            for(int i=pos-1;i>=0;i--)
                if(s[i]!='0'){
                    flag1=1;
                    for(int j=i;j>=0;j--)    cout<<s[j];
                    break;
                }
            if(!flag1)    cout<<"0";
            cout<<s[pos];
            for(int i=pos+1;i<len;i++)    
                if(s[i]=='0')    pos++;
                else break;
            for(int i=len-1;i>pos;i--)
                if(s[i]!='0'){
                    flag2=1;
                    for(int j=i;j>pos;j--)    cout<<s[j];
                    break;
                }
            if(!flag2)    cout<<"0";
        }
        else if(s[pos]=='%'){
            for(int i=len-2;i>=0;i--)
                if(s[i]!='0'){
                    flag1=1;
                    for(int j=i;j>=0;j--)    cout<<s[j];
                    break;
                }
            if(!flag1)    cout<<"0";
            cout<<s[pos];
        }    
        else{
            for(int i=len-1;i>=0;i--)
                if(s[i]!='0'){
                    flag1=1;
                    for(int j=i;j>=0;j--)    cout<<s[j];
                    break;
                }
            if(!flag1)    cout<<"0";
        }
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    11月2日考试 题解(前缀和+哈希+树状数组+树链剖分)
    【Ynoi2016】谁的梦 题解(容斥+STL)
    ENABLE_DDL_LOGGING参数
    ORA-12012: error on auto execute of job 25;ORA-12005: may not schedule automatic refresh for times in the past
    Oracle增加数据文件
    使用Loop循环向测试表插入数据
    Oracle中开窗函数row_number()、rank()、dense_rank()
    安装Oracle 19c RAC创建ssh连接成功,测试报错INS-06006
    .Net5 WebApi Swagger 发布IIS遇到的坑
    .Net5 开启JWT认证授权
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7900144.html
Copyright © 2011-2022 走看看