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

    题目简介

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


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


    输入输出格式


    输入格式:
    一个数s


    输出格式:
    一个数,即s的反转数


    输入输出样例


    输入样例#1:
    5087462
    输出样例#1:
    2647805


    输入样例#2:
    600.084
    输出样例#2:
    6.48


    输入样例#3:
    700/27
    输出样例#3:
    7/72


    输入样例#4:
    8670%
    输出样例#4:
    768%

    思路

    字符串分割,逆序,删除前后导0

    C++代码样例

    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <cstring>
    #include <vector>
    
    using namespace std;
    
    int SplitString(const string &str, vector<string> &v, const string &flag)
    {
        size_t pos_0 = 0, pos_1 = 0;
        string temp = "";
        pos_1 = str.find(flag, pos_0);
        while (pos_1 != string::npos)
        {
            v.push_back(str.substr(pos_0, pos_1 - pos_0));
            pos_0 = pos_1 + 1;
            pos_1 = str.find(flag, pos_0);
        }
        v.push_back(str.substr(pos_0, str.length() - pos_0));
        return v.size();
    }
    
    unsigned int SearchFlag(char str[])
    {
        for (int i = 0; i < strlen(str); i++)
        {
            if (str[i] == '%' || str[i] == '.' || str[i] == '/')
            {
                return str[i];
            }
        }
        return 0;
    }
    
    int main(void)
    {
        string flagStr = "";
        char flag = '';
        char tempCh = '';
        vector<string> v;
        char str[255] = {''};
        scanf("%s", str);
        if (flag = SearchFlag(str))
        {
            flagStr.push_back(flag);
            SplitString(str, v, flagStr);
        }
        else
        {
            v.push_back(str);
        }
        for (int i = 0; i < 2; i++)
        {
            if (v[i].length() == 0 || i > v.size() - 1)
                continue;
            for (size_t j = 0; j < v[i].length() / 2; j++)
            {
                tempCh = v[i][j];
                v[i][j] = v[i][v[i].length() - j - 1];
                v[i][v[i].length() - j - 1] = tempCh;
            }
            while (v[i][0] == '0' && v[i].length() > 1)
            {
                v[i].erase(0, 1);
            }
            while (v[i][v[i].length() - 1] == '0' && v[i].length() > 1)
            {
                v[i].erase(v[i].length() - 1);
            }
        }
        cout << v[0].c_str() << flag << v[1].c_str();
    }
    
  • 相关阅读:
    s2sh的MVC执行流程和执行原理
    码支付-个人支付接口-个人收款
    notepad++ FTP同步插件【FanFtpTools】2.0
    自己做的notepad++ FTP同步插件【FanFtpTools】
    thinkphp高并发抢购代码测试-解决高并发下的超卖问题!
    thinkphp5.0 与thinkphp5.1 db()函数的区别
    thinkphp5.1 长连接-单例模式测试之二
    thinkphp5.1长连接-单例模式测试!
    php 全文搜索引擎-讯搜使用
    在线WEB开发编辑器,edt.df5d.com
  • 原文地址:https://www.cnblogs.com/csnd/p/12896997.html
Copyright © 2011-2022 走看看