POJ 1047 解題報告

2021-06-22 03:31:21 字數 1179 閱讀 8534

傳送門:

解題思路:

剛看到這題,第乙個思路是迴圈鍊錶(好吧,考研考多了),不想用stl,又懶得自己構造結構體,於是選取了陣列。

剛開始,以為是普通乘法運算,寫著寫著才發現是大數乘法,hiahia,水題中的戰鬥機...

大數乘法的核心:

int cycnum[100];// 存放大數的地方,注意一點,陣列從低位往高位對應大數低位到高位

// 乙個可行方案,將大數讀到乙個string裡面,再對應賦值(!有小陷阱)

int temp, hold = 0;// hold存放進製,temp存放當前位運算後之和

// 從個位起,逐個做乘法運算

for(i = 0; i < n; i++)

while(hold > 0)

下面是原始碼:

#include #include #include #include using namespace std;

int cycnum[100], result[100];

int bigmutli(int outi, int n)

if(hold)

return 0;

return 1;

}int main()

int count = 0, next = result[0];

for(int j = 0; j < n; j++)

if(cycnum[j] == next)

index[count++] = j;

if(0 == count)

while(count > 0)

if(flag)

break;

count--;

}if(!flag)

}if(flag)

cout << anum << " is cyclic" << endl;

} return 0;

}

最後提下,網上有人採用統計各個數字出現次數來「巧妙」對比是否是迴圈數,我認為不太妥當,如果出現12345, 54321,這樣,按題目說法,這就不是迴圈數了。

可是迴圈數恰巧滿足該法,囧。。。還是按題目本身來編寫**靠譜。

另外還有乙個技巧,就是迴圈數本身,如果1234是迴圈數,則1234 x (4 + 1) =  99999,(源數乘以其位數+1的結果必然是位數+1個9),這個方法倒可以有,但太奧數了。

HDOJ 1047解題報告

練習acm後的第一篇解題報告。這題是求大數階乘的,題目要求最大能求10000的階乘。剛一看到這題,感覺思路很簡單,思考了一會之後就開始寫 思路很簡單,由於是大數乘法,普通的int型別肯定不夠用,要用陣列儲存。然後運算過程就是最簡單的乘法運算過程,乘 移位 加 的簡單過程。提交之後一直是tle,悲劇,...

Poj 1047 字串處理,KMP

2014 05 29 00 35 26 題意 思路 判斷給出的數num各乘以 1.n num的位數 是否都是迴圈數。顯然的大數乘法,我的思路是將原num擴充套件成兩倍長 如1245擴充套件為12451245 再對每個積進行kmp匹配,全配上說明是迴圈數。include include include...

poj解題報告 1328

不得不說,這題是讓我飽受折磨,畢竟第一次做貪心演算法,而且wa了好多次,幸好有學長的幫助,最終找到了問題所在,是在快排上是問題,double高位不可向int低位轉換,由於一開始強制轉換導致雖然樣例和其他的測試資料過了,但還是wa,現在改完了就對了,附上ac ps 這題通過率是22 真心不簡單 如下 ...