#11944:


nkavengertree (LaG)

學校 : 不指定學校
編號 : 62501
來源 : [49.216.191.28]
最後登入時間 :
2021-11-21 03:06:49
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [163.30.20.150] | 發表日期 : 2017-04-25 11:25

0.2s, 300KB

#include<iostream>    
using namespace std;
int main()
{
   int n,result;
   unsigned int a,b;
   while(cin>>a>>b>>n){
       result=a/b;
       cout << result << '.';
       a=a%b;

       for (int counterN=0 ; counterN<n ; counterN++){
           a=a*10;
           result=a/b;
           cout << result;
           a=a%b;
       }

       cout << "\n";
   }
return 0;
}

------------------------------------------------------------------------------

把除法的範圍加大就可以加快速度

至於有沒有更快的方法目前沒有想出來

48ms, 288KB

#include<iostream>  
using namespace std;


const int DotSize=9;
//判斷數字是幾位數
int checkInt_Length(int n){
   int counter=0;
   while(n>0){
   n/=10;
   counter++;
   }
   return counter;
}


int main()
{
   int n,result;
   unsigned long long a,b;
   while(cin>>a>>b>>n){
       result=a/b;
       cout << result << '.';
       a=a%b;

       //利用n來判斷何時結束
       while(n>0){
           //分解,最多補9個0
           int temp = (n<=DotSize) ? n:DotSize;
           //補位,注意a不為0,否則數字一樣
           for (int i=0 ; i<temp&&a!=0 ; i++){
               a*=10;
           }
           if (a>b){
               //除法
              result = a/b;
              //計算長度
              int len=temp-checkInt_Length(result);
              //補0
               for (int i=0 ; i<len ; i++){
                   cout << '0';
               }
               //結果輸出
              cout << result;
               a=a%b;
          }
          else{
             //直接補零
              for (int j=0 ; j<temp ; j++){
                  cout << '0';
              }
          }
          //扣掉
          n-=temp;
       }
       cout << "\n";    
   }
return 0;
}

 
ZeroJudge Forum