HDU 2522 A simple problem (模擬)

題目連接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;
}
相關文章
相關標籤/搜索