juinda

1020題

Oct 9th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. #include "stdio.h"
  2. void func(char*,int,int);
  3. int main()
  4. {
  5. int carry, howlong, dot=0;
  6. char a[100] = { '\0' };
  7. while (scanf("%s", a) != EOF&&scanf("%d", &carry) != EOF)
  8. {
  9. if (a[0] == '-'&&a[1] == '0'&&a[2]=='\0')
  10. {
  11. puts("0");
  12. continue;
  13. }
  14. for (int i = 0; i < 100; i++)
  15.  
  16. {
  17. if (a[i] == '.')
  18. {
  19. dot = i;
  20. howlong = dot + carry + 1;
  21. if (a[howlong] - '0' >= 5)//過5進位
  22. {
  23. if (carry == 0)//四捨五入到第0位
  24. {
  25. howlong--;//前一位為小數點
  26. a[howlong] = '\0';
  27. }
  28. a[howlong - 1] ++;
  29. a[howlong] = '\0';
  30. howlong--;
  31. break;
  32. }
  33. else //沒過5
  34. {
  35. if (carry == 0)
  36. {
  37. howlong--;//<<小數點
  38. a[howlong] = '\0';
  39. }
  40. else
  41. {
  42. a[howlong] = '\0';
  43. }
  44. }
  45. }
  46. }
  47. if (dot == 0)//無小數位元
  48. {
  49.  
  50. puts(a);
  51. continue;
  52. }
  53. for (int i = howlong; i >= 0; i--)
  54. {
  55. if (a[i] == 58 && i == 1)//前一位進為第二位
  56. {
  57. a[i] = '0';
  58. if (a[i - 1] == '-')//第一位為負
  59. {
  60. a[i - 1] = '1';
  61. func(a,howlong,dot);
  62. printf("-");
  63. puts(a);
  64. break;
  65. }
  66. else if (a[i - 1] == '9')//第一位為9
  67. {
  68. func(a,howlong,dot);
  69. a[i - 1] = '0';
  70. printf("1");
  71. puts(a);
  72. break;
  73. }
  74. else//第一位非負非9
  75.  
  76. {
  77. a[i - 1]++;
  78. func(a,howlong,dot);
  79. if (dot == 1)
  80. {
  81. printf("10");
  82. break;
  83. }
  84. puts(a);
  85. break;
  86. }
  87. }
  88. else if (a[i] == 58 && a[i - 1]<58 && a[i - 1] >= 48)//前一位進位
  89. {
  90. a[i] = '0';
  91. a[i - 1]++;
  92. }
  93. else if (a[i] == 58 && a[i - 1] == '.')//前一位進為且欲小數點
  94. {
  95. i--;
  96. a[i] = '\0';
  97. a[i - 1]++;
  98. }
  99. else
  100. {
  101. func(a,howlong,dot);
  102. if (dot == 1&&a[0]==58)
  103. {
  104. puts("10");
  105. break;
  106. }
  107. puts(a);
  108. break;
  109. }
  110. }
  111. }
  112. return 0;
  113. }
  114. void func(char *address,int howlong,int dot) //刪去尾部多餘之0
  115. {
  116. for (int i = 100; i >= 0; i--)
  117. {
  118.  
  119. if (*(address + i) != '0'&&*(address + i) != '\0'&&i<=howlong&&*(address + i) != '.'||i==dot-1)break;
  120. *(address + i) = '\0';
  121. }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment