루오 구 -P1553 자리 반전 (업그레이드 버전)

루오 구 -P1553 자리 반전 (업그레이드 버전)

원래의 질문에 링크 : https://www.luogu.com.cn/problem/P1553


주제 배경

다음은 참조를 위해, 원래의 표면의 타이틀 만

숫자를 감안할 때, 새로운 번호의 각 비트를 반전시킨 디지털 번호하시기 바랍니다.

그룹 및 NOIp2011 첫 번째 질문의 인기는 다른 :이 숫자가 소수, 분수, 백분율, 정수가 될 수 있습니다. 분수 반전 반전 분모되고, 그 후, 상기 정수 부분과 소수 부분을 교환하지 않고 분별 반전 반전의 수의 반전 후 소수부의 정수 부분이다 반전 모든 비트 교환 정수인 반전의 분자수는, 분자와 분모를 교환 할 수없는, 분자의 퍼센트는 정수의 변화율 만 디지털 부이어야한다. 새로운 정수는 달리 제로이어야한다 새로운 숫자의 높은 자리를 반전시킨 오리지널 번호를 부여하지 않는 제로 정수의 일반적인 형태를 충족한다 새로운 진수의 단부 (0 아닌 소수부를 제외 숫자 0에 다른 추가 아니, 다음) 만 0을 유지, 분자와 분모에 대해 점수를하지 않는 것은 아닙니다 진수 (약 물방울 신발 죄송합니다, 너무 오 입력 데이터) 분모가 0이 아닌 것을 확인하기 위해,이하지 않습니다. 음.

제목 설명

숫자를 감안할 때, 새로운 번호의 각 비트를 반전시킨 디지털 번호하시기 바랍니다.

그룹 및 NOIp2011 첫 번째 질문의 인기는 다른 :이 숫자가 소수, 분수, 백분율, 정수가 될 수 있습니다.

  • 정수 역 스왑은 모든 디지털이다.
  • 반전의 십진 정수 부분은 정수 부분과 소수 부분을 교환하지 않고, 반전의 수가 그 소수 부분을 반전된다.
  • 점수 반전 분모 분자와 분모를 교환하지 않고, 다음 분자수가 반전, 반전된다.
  • 분자의 비율은 정수, 비율 변화에만 디지털 섹션해야합니다.

입력 형식

숫자의

출력 형식

숫자, 즉 반전의 횟수

입력 및 출력 형식

입력 # 1

5087462

출력 # 1

2647805

입력 # 2

600.084

출력 # 2

6.48

입력 # 3

700/27

출력 # 3

7/72

입력 # 4

8670%

출력 # 4

768%

설명 / 팁

모든 데이터는 : 25 %의은 크지 (20)보다 정수

의 25 %는 소수 부분, 정수 및 분수 부분 (10)보다 큰

25 % (S)는 분자와 분모는 10보다 큰, 일부인

25 %의 퍼센트로, 19 개 이하의 분자 큰

(데이터 20)

데이터 보증 :

  • 정수 플립 들어, 그렇지 않으면 새로운 원래 숫자의 높은 자리 숫자를 반전시킨 오리지널 번호 부여 제로가 아니면 원문 정수 새로운 정수 정수 충족 일반적인 형태의 수는 제로이어야한다.
  • 다른 번호가없는 것을 제외하고 소수 플립, 위의 섹션에서 소수점 뒤에 소수점 앞의 폼의 경우, 만 0 만약을 유지 한 후, 추가 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