問題 D: 大數
時間限制: 1 Sec 內存限制: 128 MB
提交: 2410 解決: 450
[狀態] [提交] [命題人:外部導入]
題目描述
小七是一個很可愛很努力的女孩子。她對大數的運算非常感興趣,在學習了幾天之後,終於精通了大數的加減乘除。但是自從她學會了 JAVA ,她覺得大數實在是太簡單太無聊了,因爲運用 JAVA 中 BigInteger 大整數類,可以輕鬆實現大數的加減乘除。某一天她突然發現,很多大數的題目的數據都有規律。這些數都是由比他小的某個數重複構成,比如說 121212 由 12重複構成 ,233233 ,由233重複構成,而1231231並不是由123重複構成。無聊的小七終於找到了樂子,她想要找到每個大數是由哪個比它小的數重複構成。算法剛入⻔的小七無法解決這個問題,於是她求助於你。
輸入
一行 一個正整數n(n<=101000000)。
輸出
一行
如果存在多種,輸出最小的滿足題意的數;
如果不存在,則輸出-1.
樣例輸入 Copy
121212
樣例輸出 Copy
12
#include "bits/stdc++.h"
typedef long long ll;
using namespace std;
string temp;
bool judge(string s) {
int len=s.size(),i=0,t=0;
for(t=1; t<=len/2; ++t) {
if (len%t) continue;//有餘數,一定不爲週期串
for (i=t; i<len&&s[i%t]==s[i]; ++i);
if (i==len) {
temp=s.substr(0,t);
return true;
}
}
return false;
}
int main() {
string a;
cin>>a;
if(judge(a))cout<<temp;
else cout<<-1;
return 0;
}
/*測試樣例1
121212
*/