7-6割り切れる学士
ここで、「学士」はない平均の友人をして-シングル王によると、1で構成番号など1,11,111,1111などのすべて。凡例は、学士は5で奇数の倍数で終わっていないのいずれかであり得ます。例えば、111111 13は、分割してもよいです。さて、あなたのプログラムが整数を読み取るためにx
、整数は5の終わりに、確かではない奇妙です。次いで、算出した後、2つの数値を出力する:最初の番号がs
示すx
乗算されるs
暴漢、2番目の数字はn
暴漢のビット数です。このようなソリューションは、確かにあなたの最も小さい出力ソリューションとして要求だけ、対象ではありません。
ヒント:1つの明白な方法は、徐々にビットの学士割り切れるまで数増やすことであるx
これまでのところを。しかし困難s
非常に多数であってもよい-結果は31 3584229390681乗算されるので、例えば、プログラム入力31、3,584,229,390,681及び15の出力は111111111111111、15 1の合計です。
入力フォーマット:
所与の入力ラインに5正の奇数の終わりではないx
(<1000)。
出力フォーマット:
行の最小出力に対応するs
とn
、隙間によって分離されました。
サンプル入力:
31
出力例:
3584229390681 15
BREAK、あれば、現在の分割NUM Xのかどうか、次に*シングルの各現在の数を聞かせて10 + 1次に分割されるまで所定の数よりも大きい、S1格納された文字列xの数で分割された各シングル、及び、 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;
}