傳送門:
解題思路:
剛看到這題,第乙個思路是迴圈鍊錶(好吧,考研考多了),不想用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 真心不簡單 如下 ...