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;
}