首页 > 其他分享 >洛谷 P1553 数字反转(升级版)

洛谷 P1553 数字反转(升级版)

时间:2023-08-05 15:33:50浏览次数:50  
标签:10 洛谷 百分数 反转 整数 t1 P1553 升级版 小数

题目描述

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

  • 整数反转是将所有数位对调。
  • 小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分。
  • 分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母。
  • 百分数的分子一定是整数,百分数只改变数字部分。
  • 数据没有负数。

分析

这道题具体实现并不难,但是有点坑。
首先写出大体框架:

string a;
void t1(),t2(),t3(),t4();
int main() {
    cin >> a;
    if (a[a.length()-1]=='%') t3();//百分数
    for (auto k : a) {
        if (k == '.') t1();//小数
        else if (k == '/') t2();//分数
    }
    t4();//整数
    return 0;
}

接下来依次实现各部分。

  1. 整数比较简单。首先将字符串转化为整数,利用模运算倒序得到每一位数字即可。
    但这里要注意数据范围:
  • 对于 \(25\%\) 的数据,\(s\) 是整数,不大于 \(20\) 位

    所以 记得开\(\textup{unsigned}\) \(\textup{long}\) \(\textup{long}\)。

  1. 百分数实质上就是整数后多输出了一个百分号,同上。

  2. 小数可以利用sscanf()从字符串中分别读出整数部分和小数部分,分别处理即可。

  3. 分数只不过是把小数的小数点换成了分数线,同上。

代码

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;
string a;
void t1(),t2(),t3(),t4();
int main() {
    cin >> a;
    if (a[a.length()-1]=='%') t3();//百分数
    for (auto k : a) {
        if (k == '.') t1();//小数
        else if (k == '/') t2();//分数
    }
    t4();//整数
    return 0;
}

void t1() {
    unsigned long long t=0, c=0, k=0, g=0;
    sscanf(a.c_str(), "%llu.%llu", &t, &c);
    while (t) {
        k = k*10+t%10;
        t/=10;
    }
    while (c) {
        g = g*10+c%10;
        c/=10;
    }
    cout << k<< '.' << g;
    exit(0);
}

void t2() {
    unsigned long long t=0, c=0, k=0, g=0;
    sscanf(a.c_str(), "%llu/%llu", &t, &c);
    while (t) {
        k = k*10+t%10;
        t/=10;
    }
    while (c) {
        g = g*10+c%10;
        c/=10;
    }
    cout << k<< '/' << g;
    exit(0);
}

void t3() {
    unsigned long long t=0, c=0;
    for (unsigned long long i=0; i<a.length()-1; i++) {
        t = t*10+(a[i]-'0');
    };
    while (t) {
        c = c*10+t%10;
        t/=10;
    }
    cout << c << '%';
    exit(0);
}

void t4() {
    unsigned long long t=0, c=0;
    for (unsigned long long i=0; i<a.length(); i++) {
        t = t*10+(a[i]-'0');
    }
    while (t) {
        c = c*10+t%10;
        t/=10;
    }
    cout << c;
    exit(0);
}

标签:10,洛谷,百分数,反转,整数,t1,P1553,升级版,小数
From: https://www.cnblogs.com/sleepboth/p/17608010.html

相关文章

  • 洛谷 P7911 [CSP-J 2021] 网络连接 题解
    写在前面一道普及级别的题目。CSP-J全国统一命题2021年第三题。本题解来自于一位真正的大佬。传送门https://www.luogu.com.cn/blog/xyf007/solution-p7911。题面信息来源于洛谷。请访问https://www.luogu.com.cn/problem/P7911。声明:本题解非商业用途,一切侵权行为请联系作......
  • EEZ H24005开源电源升级版EEZ BB3,性能更强,电压支持0-80V,电流0-10A
    软件包:https://github.com/eez-open/modular-psu-firmware硬件包:https://github.com/eez-open/modular-psu地址来源:https://www.crowdsupply.com/envox/eez-bb3视频展示:http://v.qq.com/x/page/u0957v1u11y.html规格:产品效果:基于自家的开源跨平台GUI设计平台EEZStudio设计的界面效......
  • 洛谷 U321190 麻将 加强加强版 题解
    Description给定一副\(k\)张牌的麻将牌,求能「听」哪些牌。对于所有数据,\(1\leqk\leq2\times10^5\)。link:https://www.luogu.com.cn/problem/U321190Solution算法零枚举「听」的牌,用状压DP或者贪心判断。时间复杂度\(\mathcal{O}(2^n\text{poly}(n))\)或\(\mathca......
  • 洛谷-P9485 题解
    写在前面:这是蒟蒻交的第一篇绿题题解(大祭),因为线性做法比较难想,本篇会着重讲述用RMQ问题求解,并尽可能用清晰明了的图片和简易的文字讲明白。正文最坏时间复杂度:\(\mathcal{O}(\sumn+\log\sumn)\)在求解之前,先让我们想个问题,如何求解积水格数?再简单点,对于每个\(i\),其积水......
  • 洛谷 P9489 ZHY 的表示法 题解
    Description给定\(\{x_n\}\),\(y\)为任意实数,求出在\([l,r]\)内\(\displaystyle\sum_{i=1}^{n}\lfloor\dfrac{y}{x_i}\rfloor\)有多少种取值。link:https://www.luogu.com.cn/problem/P9489Solution可以表示出的取值一定能被为某个\(x_i\)的倍数的\(y\)表示出。根据......
  • 第十四节 学生管理系统升级版
    学生管理系统升级版需求:​ 为学生管理系统书写一个登陆、注册、忘记密码的功能。​ 只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。分析:登录界面:System.out.println("欢迎来到学生管理系统");System.out.println("请选择操作1登录2注册3忘记密码");......
  • 洛谷 P3243 [HNOI2015] 菜肴制作 - toposort 需自己理解翻译题面
    P3243[HNOI2015]菜肴制作题目描述知名美食家小A被邀请至ATM大酒店,为其品评菜肴。ATM酒店为小A准备了\(n\)道菜肴,酒店按照为菜肴预估的质量从高到低给予\(1\)到\(n\)的顺序编号,预估质量最高的菜肴编号为\(1\)。由于菜肴之间口味搭配的问题,某些菜肴必须在另一些......
  • 洛谷 P9479 - [NOI2023] 桂花树
    显然,条件一等价于在\(T'\)中,\(1\simn\)组成的虚树等于它本身。条件二等价于\(1\simi\)组成的虚树上点的标号不超过\(i+k\)。我们考虑在原树的基础上依次添加\(n+1\simn+m\)这\(m\)个点。添加一个点\(i\)时,它与原树的位置关系可能有以下几种:挂在原树上某......
  • 洛谷P4407 电子词典
    读完这题我马上就想到了题解trie+dfs的爆搜解法,这种解法思维难度很低,算个模拟,很容易想到但是我们稍微计算一下复杂度,就可以发现达到了\(1e8\)级别(\(26*20*20*1e4\),即对于每一个待查字符串(\(1e4\)),枚举每一个位置(\(20\)),每一个位置枚举26个字母(\(26\)),然后再在trie树上匹配(\(20\)))害......
  • 洛谷 P1347 排序 - 拓扑排序
    P1347排序题意依次给一些具有排序关系的序列,问你在能否在若干个序列之后确定元素的顺序、判断元素关系存在矛盾、判断无法确认元素顺序思路对于每一个排序关系均进行toposort,后面就是toposort判环(出现矛盾),toposort判顺序,无法确认唯一关系。详见代码或看洛谷题解区代码......