L1-046 整除光棍 (20分)
這里所謂的“光棍”,并不是指單身汪啦~ 說的是全部由 \(1\) 組成的數字,比如 \(1\)、\(11\)、\(111\)、\(1111\) 等,傳說任何一個光棍都能被一個不以 \(5\) 結尾的奇數整除,比如,\(111111\) 就可以被 \(13\) 整除, 現在,你的程式要讀入一個整數 \(x\),這個整數一定是奇數并且不以 \(5\) 結尾,然后,經過計算,輸出兩個數字:第一個數字 \(s\),表示 \(x\) 乘以 \(s\) 是一個光棍,第二個數字 \(n\) 是這個光棍的位數,這樣的解當然不是唯一的,題目要求你輸出最小的解,
提示:一個顯然的辦法是逐漸增加光棍的位數,直到可以整除 \(x\) 為止,但難點在于,\(s\) 可能是個非常大的數 —— 比如,程式輸入 \(31\),那么就輸出 \(3584229390681\) 和 \(15\),因為 \(31\) 乘以 \(3584229390681\) 的結果是 \(111111111111111\),一共 \(15\) 個 \(1\),
輸入格式:
輸入在一行中給出一個不以 \(5\) 結尾的正奇數 \(x \; (\leq 1000)\),
輸出格式:
在一行中輸出相應的最小的 \(s\) 和 \(n\),其間以 \(1\) 個空格分隔,
輸入樣例:
31
輸出樣例:
3584229390681 15
代碼:
#include<bits/stdc++.h>
using namespace std;
int x,ans,tot,flag;
int main()
{
cin>>x;
for(ans=1;;ans++)
{
tot=(tot<<3)+(tot<<1)+1;
if(tot>=x)
{
flag=1;
cout<<tot/x;
}
else if(flag)cout<<0;
tot%=x;
if(!tot)break;
}
cout<<' '<<ans;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/4977.html
標籤:C++
下一篇:C++語言基礎--0_前言
