Holey_yan

20141021_KUAS_VisualC++_Exam05

Oct 21st, 2014
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. /************************************/
  2. /** 20141021 Exam 05               **/
  3. /** Maker  : Yan                   **/
  4. /** E-Mail : [email protected] **/
  5. /** Date   : 2014/10/21 pm.12:00   **/
  6. /************************************/
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <math.h> //因使用floor 函式故引入<math.h>
  11.  
  12. /* ceil(x)  x 的最小整數上界
  13.    floor(x) x 的最大整數下界 */
  14.  
  15. //整數進制轉換
  16. void GetIntegerAnyNary(int number, int nary);
  17.  
  18. //小數進制轉換
  19. void GetDecimalAnyNary(double number, int nary, int counter);
  20.  
  21. int main(int argc, char const *argv[])
  22. {
  23.     while(1)
  24.     {
  25.         double number = 0.0;
  26.         int nary = 0;
  27.         scanf("%lf", &number);
  28.         scanf("%d", &nary);
  29.         if(number <= 0)
  30.             break;
  31.         GetIntegerAnyNary(floor(number), nary);
  32.         printf(".");
  33.         GetDecimalAnyNary(number, nary, 0);
  34.         printf("\n");
  35.     }
  36.  
  37.     return 0;
  38. }
  39.  
  40. void GetIntegerAnyNary(int number, int nary)
  41. {
  42.     if(number == 0)
  43.         return;
  44.  
  45.     //stack (堆疊)
  46.     GetIntegerAnyNary(number / nary, nary);
  47.     printf("%d", number % nary);
  48. }
  49.  
  50. void GetDecimalAnyNary(double number, int nary, int counter)
  51. {
  52.     number = number - floor(number);
  53.     printf("%d", (int)(number * nary));
  54.     if((number * nary - floor(number * nary) == 0))
  55.         return;
  56.     number = number * nary - floor(number * nary);
  57.  
  58.     //counter 做六位小數補額用
  59.     counter++;
  60.     if(counter > 5)
  61.     {
  62.         for(int i = counter; i < 6; i++)
  63.             printf("0");
  64.         return;
  65.     }
  66.     GetDecimalAnyNary(number, nary, counter);
  67. }
Advertisement
Add Comment
Please, Sign In to add comment