程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 2522 A simple problem

HDU 2522 A simple problem

編輯:C++入門知識

HDU 2522 A simple problem


A simple problem

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3368 Accepted Submission(s): 1249


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
Source HDU 2008-10 Programming Contest

模擬除法的運算。

上代碼

#include 
#include 
#include 
using namespace std;
int main()
{
    int a[100005],t;  //a數組是用來判斷循環小數的。
    scanf("%d",&t);
    while(t--)
    {
        memset(a,0,sizeof(a));
        int n;
        int flag=0;
        scanf("%d",&n);
        if(n==1)
        {
            printf("1\n");  //n為一就是一
            continue;
        }
        if(n<0)
        {
            n=-n;   //小於0的話,先變正,做個標記
            flag=1;
        }
        int l=1;
        a[l]=1;   
        if(flag)
            printf("-0.");  //輸出符號
        else
            printf("0.");   
        while(l)  //l除不盡時,即不為0
        {
            l*=10;   //開始模擬,先乘10
            printf("%d",l/n);  //輸出第一位小數
            l%=n;  //取余,不斷重復以上操作
            if(a[l])  
                break;
            a[l]=l;  //讓a[l]=l  ,出現相同的循環時,a[l]為真直接跳出了。保證只有一個循環節。
        }
        printf("\n");
    }
    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved