1. 云栖社区>
  2. 技术文集>
  3. 列表>
  4. 正文

P1553 数字反转(升级版)

作者:用户 来源:互联网 时间:2018-06-07 18:32:15

洛谷题解

P1553 数字反转(升级版) - 摘要: 本文讲的是P1553 数字反转(升级版), https://www.luogu.org/problem/show?pid=1553 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数。 这次与NOIp2011普及组第一题不同的是:这个数可以是小

https://www.luogu.org/problem/show?pid=1553
题目描述

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

这次与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个数据)

说一下做这一题的感受吧,本题的难度并不难,属于入门级别的难度,但是比较坑的是,数据点太多,细节太多,一定要注意前导0的问题,本题采用的分情况讨论的思路,代码较长,但是比较容易理解,若有不懂的地方欢迎提问。。
ac代码

#include<bits/stdc++.h>
using namespace std;
char a[100];
int k,t,i,j;
int main()
{
    gets(a);
    int l=strlen(a);
    for(i=0;i<l;i++)
    {
          if(a[i]=='.')
          {
             k=1;t=i;break;
          }
              if(a[i]=='/')
              {
                k=2;t=i;break;
              }
            if(a[i]=='%')
            {
                k=3;t=i;break;
            }
    }
    if(k==0)
    {
       for(i=l-1;i>=0&&a[i]=='0';i--);
          if(i>=0)
              for(;i>=0;i--)
                 cout<<a[i];
                 else
                 cout<<"0";
    }
    else if(k==1)
    {
        for(i=t-1;i>=0&&a[i]=='0';i--);
          if(i>=0)
              for(;i>=0;i--)
                 cout<<a[i];
                 else
                 cout<<"0";
                 cout<<".";
        for(i=t+1;i<l&&a[i]=='0';i++);
          if(i<l)
              for(int j=l-1;j>=i;j--)
                 cout<<a[j];
                 else
                 cout<<"0";
    }
    else if(k==2)
    {
        for(i=t-1;i>=0&&a[i]=='0';i--);
          if(i>=0)
              for(;i>=0;i--)
                 cout<<a[i];
                 else
                 cout<<"0";
                 cout<<"/";
        for(i=l-1;i>=t+1&&a[i]=='0';i--);
          if(i>=t+1)
              for(;i>=t+1;i--)
                 cout<<a[i];
                 else
                 cout<<"0";
    }
    else
    {
            for(i=t-1;i>=0&&a[i]=='0';i--);
          if(i>=0)
              for(;i>=0;i--)
                 cout<<a[i];
                 else
                 cout<<"0";
                 cout<<"%";
        for(i=l-1;i>=t+1&&a[i]=='0';i--);
          if(i>=t+1)
              for(;i>=t+1;i--)
                 cout<<a[i];
    }
    return 0;

}

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有 的相关内容,欢迎继续使用右上角搜索按钮进行搜索洛谷题解 ,以便于您获取更多的相关知识。

c++-C++算法:通过递归算法实现非零数字反转

问题描述 C++算法:通过递归算法实现非零数字反转 事例: 321------123 1568-----8651 解决方案 #include &lt;iostream&gt; using namespace std; void foo(int x) { if (x == 0) return; ...

java 输入一个数字,反转输出这个数字的值(实现方法)_java

...示: package 第四天; import java.util.Scanner; public class 数字反转 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int num=sc.nextInt(); int result=0;//存反转的数字 wh...

Laravel深入学习2 - 控制反转容器

...,欢迎指正。 欢迎转载,转载请注明出处,谢谢! 控制反转容器基础绑定上一张,我们学习了依赖注入,接下来,我们继续探索的是“控制反转”或者叫“依赖倒置”。后面我们使用IoC容器来代指如上的定义。IoC容器使类的依...

ip地址转数字以及反转

...是基于网络产品的项目开发的时候,难免会用到IP地址与数字之间的转换,大部分时间是我们自己写个程序来实现该功能,但是Mysql就有函数可以实现该功能:eg:ip:127.0.0.1// ip转数字select inet_aton('127.0.0.1') as rs;rs2130706433// 数字转IPs...

一步一步写一个简单的js版quine程序

... 早上看了justjavac大大的一篇文章:javascript 的 quine 程序升级版,了解了一下所谓quine程序的概念: 一个 quine 是一个计算机程序,它不接受任何输入,且唯一的输出就是自身的源代码。 感觉挺有意思的,于是打算自己用js写一...

前三篇
后三篇