7-6 나눌 학사

7-6 나눌 학사

여기에서, 용어 "학사"가되지 평균 친구 않습니다 - 단일 왕이 말했다 하나에 의해 구성 숫자와 같은 1,11,111,1111 등등의 모든. 전설이 될 수 있습니다 학사은 5 홀수 나눌 끝나지 않습니다. 예를 들어, 111111 13 나눌 수있다. 지금, 당신의 프로그램이 정수를 읽어 x, 정수 5의 끝에서 확실히 이상한입니다. 그리고, 계산 한 후, 두 개의 숫자를 출력한다 : 첫 번째 숫자 s나타내는 x곱하여 s악당, 두 번째 숫자는 n악한의 비트 수이다. 이러한 솔루션은 확실히 작은 출력 솔루션으로 요청에만 적용되지 않습니다.

팁 : 한 가지 확실한 방법은 점차 비트의 학사 나눌 때까지 수를 늘리는 것입니다 x지금까지입니다. 그러나 어려움 s매우 많은 수있다 - 결과가 31 3,584,229,390,681 승산되기 때문에, 예를 들면, 프로그램 입력 (31) 및 (15)의 3,584,229,390,681 후 출력 111,111,111,111,111, 15 (1)의 합계이다.

입력 형식 :

특정 입력 라인에 양의 홀수 5의 끝이 아니다 x(이 <1,000).

출력 형식 :

행 최소 출력에 대응 s하고 n, 그 사이 공간에 의해 분리된다.

샘플 입력 :

31

 

샘플 출력 :

3584229390681 15

싱글 각각 현재 수는 10 + 1 각 싱글 x의 개수로 나눈 후, 분할, S1 저장된 문자열까지 지정된 수보다 *하자하고 참조 여부 전류 나누어 NUM X, 만약, BREAK; NUM * 10 + 1로 나눈 값 (X)이 아닌 나머지를 NUM에 할당 된 경우, 즉 시뮬레이션 분할 작은 범위에없는 시간 NUM 변경을 보장한다.

#include <bits/stdc++.h>

using namespace std;
int main()
{
    int x,n,l=0,num=1,i=0;
    char s1[10000];
    cin>>x;
    while(num<x){   //保证当前光棍数大于所给的x
         num=num*10+1;
         l++;
    }
    while(1){
        s1[i++]=num/x+'0';//存光棍数除以x的商
        l++;//记录长度
        if(num%x==0)
            break;
        num=num%x*10+1;

    }
    cout<<s1<<" "<<l;
    return 0;
}

 

게시 14 개 원래 기사 · 원의 찬양 (41) ·은 30000 +를 볼

추천

출처blog.csdn.net/qq_42145681/article/details/103964946