hdu 2522 求1/n的迴圈節 小模擬 另外memset節省時間的特殊寫法
阿新 • • 發佈:2019-02-05
A simple problem
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2567 Accepted Submission(s): 882
Problem Description Zty很痴迷數學問題.。一天,yifenfei出了個數學題想難倒他,讓他回答1 / n。但Zty卻回答不了^_^. 請大家程式設計幫助他.
Input 第一行整數T,表示測試組數。後面T行,每行一個整數 n (1<=|n|<=10^5).
Output 輸出1/n. (是迴圈小數的,只輸出第一個迴圈節).
Sample Input 4 2 3 7 168
Sample Output 0.5 0.3 0.142857 0.005952380
Author yifenfei 程式碼很簡單 直接模擬 一開始 自己腦子糊塗了 非要把結果存進ans陣列 然後就亂套了 直接模擬現實中的運算即可 另外注意memset的使用 如果直接 memset(a,0,sizeof(a)); 會很浪費時間 如果是memset(a,0,(n+100)*sizeof(a[0])) 這樣會快很多很多 對於下面程式 如果直接memset 會超時 題目給了2000ms 如果是用上面的方法 只需要200ms
#include<stdio.h> #include<string.h> int vis[1000000+100]; int main() { int cas,n,i; scanf("%d",&cas); while(cas--) { scanf("%d",&n); if(n<0) {printf("-");n=-n;} memset(vis,0,(n+100)*sizeof(vis[0])); int cnt=0; int fz=1,fm=n; if(n==1) {printf("1\n");continue;} printf("0."); while(fz!=0) { vis[fz]=1; fz=fz*10; printf("%d",fz/fm); fz=fz%fm; if(vis[fz]) break; } printf("\n"); } return 0; }