羅区-P1553桁反転(アップグレード版)

羅区-P1553桁反転(アップグレード版)

元の質問へのリンク:https://www.luogu.com.cn/problem/P1553


トピックの背景

以下に、参考のために、元の表面のタイトルのみ

数を考えると、新しい番号の各ビットを反転したデジタル数にしてください。

グループの人気とNOIp2011最初の質問は異なっている:この数は小数点以下、画分、パーセンテージ、整数であることができます。次いで分別反転反転が分母であり、;分数反転は整数部分と小数部分を交換することなく、反転の数の反転は、小数部の整数部分であり、反転は全てのビットスワップの整数であります反転の分子の数は、分子と分母を交換しないように、分子のパーセントは整数、変化率のみデジタルセクションでなければなりません。新しい整数はまた、そうでない場合はゼロであってはならない新しい番号の最上位桁を反転した元の番号が与えられていない限りゼロであり、整数の一般的な形式を満たさなければならない;新しい進数の端(0でない小数部ない限り番号0に他の追加をなし、そして)のみ0を保持、分子と分母についてのポイントを獲得していないされていない小数(約滴靴は申し訳ありませんが、あまりにもああ、入力データ)は分母が0でないことを確認するために、これはそうではありません。マイナス。

タイトル説明

数を考えると、新しい番号の各ビットを反転したデジタル数にしてください。

グループの人気とNOIp2011最初の質問は異なっている:この数は小数点以下、画分、パーセンテージ、整数であることができます。

  • Integer型の逆スワップは、すべてデジタルです。
  • 逆転の10進数の整数部分は、整数部分と小数部分を交換することなく、反転の数の小数部分を反転します。
  • スコアが反転分母が分子と分母を交換することなく、その後の分子の数が反転し、反転されます。
  • 分子のパーセントは整数、変化率のみデジタルセクションでなければなりません。

入力形式

数秒

出力フォーマット

数、即ち、反転Sの数

入出力フォーマット

入力#1

5087462

出力#1

2647805

入力#2

600.084

出力#2

6.48

入力#3

700/27

出力#3

7/72

入力#4

8670%

出力#4

768%

説明/ヒント

すべてのデータ:25%がSが20より大きくない整数です。

小数のフラクション、整数部と小数部は10より大きく25%秒ないれます

25%Sは分子と分母が10以下であり、画分であります

25%sはパーセント、19個の分子よりも大きくないです

(20データ)

データ保証:

  • 整数フリップのために、そうでなければ、新しい、元の図形の最高桁の数字を反転した元の数、所与のゼロでない限り、元の整数値と新しい整数整数満たす共通のフォームの数は、ゼロであってはなりません。
  • 他の数が存在しない以外は小数フリップフロッ、上記セクション、小数点の後ろに小数点の前面の一部を形成するために、唯一の0の場合を保持し、その後、余分な0(0小数部の端でない小数と出会う一般的な形態を、確実にするために反転数が0の最後に表示された後、余分省略0)
  • スコアフリップため、スコアが点ではなく、分数の分子および分母ではありません。分母がゼロではない入力します。上記参照整数の関連規定を反転します。
  • フリップパーセントの用語については、整数フリップ関連するコンテンツを参照してください。

負のデータは存在しません。

C ++コード

#include <iostream>
#include <cstring>
using namespace std;

char s[25];

void reversion(int i, int j) {
    for(int k=0;k<(j+1-i)/2;++k)
        swap(s[i+k],s[j-k]);
    for(;s[i]=='0'&&i<j;++i);
    for(;s[j]=='0'&&i<j;--j);
    for(;i<=j;++i)
        cout<<s[i];
}

int main() {
    cin>>s;
    int lens,i,idx;
    lens=strlen(s);
    idx=lens-1;
    if(s[idx]=='%')
    {
        reversion(0,lens-2);
        cout<<'%';
    }
    else {
        for(i=0;i<lens;++i)
            if(s[i]=='.'||s[i]=='/')
            {
                idx=i;
                break;
            }
        if(idx==lens-1)
            reversion(0,lens-1);
        else {
            reversion(0,idx-1);
            cout<<s[idx];
            reversion(idx+1,lens-1);
        }
    }
    cout<<endl;
    return 0;
}

おすすめ

転載: www.cnblogs.com/yuzec/p/12590892.html