題目連接php
Problem Description
Zty很癡迷數學問題.。一天,yifenfei出了個數學題想難倒他,讓他回答1 / n。但Zty卻回答不了^_^. 請你們編程幫助他.ios
Input
第一行整數T,表示測試組數。後面T行,每行一個整數 n (1<=|n|<=10^5).c++
Output
輸出1/n. (是循環小數的,只輸出第一個循環節).編程
Sample Input
4
2
3
7
168函數
Sample Output
0.5
0.3
0.142857
0.005952380測試
分析:
沒毛病,題目確實很簡單,不就是除法模擬嗎?但你能想到每個memset函數的內部執行T了半天嗎?也算是又瞭解了一點東西。spa
memset是按照字節對待初始化空間進行初始化的,也就是說,函數裏面的第二個參數的那個初值(通常爲0)是按照一個一個字節往第一個參數所指區域賦值的,因此,對於單字節數據類型(char)能夠初始化爲任意支持的值,都沒有問題,可是對於非多字節數據類型只能初始化爲0,而不能初始化成別的初值,由於對全部字節按任意順序賦值0的結果都是0,而若是初始化爲其餘的值,就會一個字節一個字節的進行賦值,從而出現奇怪的結果。好比說,上面的例3之因此沒有出錯就是由於初始化爲0,可是若是初始化爲1,那麼由於int通常是4個字節,那麼至關於將一個int元素初始化成了0000 0001 0000 0001 0000 0001 0000 0001,這樣對於一個int元素確定不是1,而是一個很大的數,結果出乎意料。code
從這裏也能夠看出來memset初始化int類型的時間複雜度應該比初始化char類型的時間複雜度高。ip
代碼:get
#include<stdio.h> #include<iostream> #include<map> #include<string.h> using namespace std; char mp[500001];//int類型的就不能夠,memset函數的複雜度不同 int main() { int t,n,temp,s; scanf("%d",&t); while(t--) { memset(mp,0,sizeof(mp)); scanf("%d",&n); if(n<0) { printf("-"); n=-n; } if(n==1) { printf("%d\n",n); continue; } else printf("0."); temp=1; mp[0]=1; for(int i=1;; i++) { if(mp[temp]==1) break; mp[temp]=1; s=temp*10/n; printf("%d",s); temp=temp*10-s*n; } printf("\n"); } return 0; }