小数分数转换.c 1000 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <stdio.h>
  2. // 求最大公约数
  3. int gcd(int a, int b) {
  4. return b == 0 ? a : gcd(b, a % b);
  5. }
  6. int main() {
  7. char str[20];
  8. scanf("%s", str);
  9. // 提取整数部分和小数部分
  10. int integerPart = 0, decimalPart = 0, decimalLength = 0;
  11. int i = 0;
  12. while (str[i] != '.') {
  13. integerPart = integerPart * 10 + (str[i] - '0');
  14. i++;
  15. }
  16. i++;
  17. while (str[i] != '\0') {
  18. decimalPart = decimalPart * 10 + (str[i] - '0');
  19. decimalLength++;
  20. i++;
  21. }
  22. // 将小数部分化为最简分数
  23. int numerator = decimalPart;
  24. int denominator = 1;
  25. int j;
  26. for (j = 0; j < decimalLength; j++) {
  27. denominator *= 10;
  28. }
  29. int commonDivisor = gcd(numerator, denominator);
  30. numerator /= commonDivisor;
  31. denominator /= commonDivisor;
  32. // 输出结果
  33. if (integerPart == 0) {
  34. printf("0 %d %d\n", numerator, denominator);
  35. } else {
  36. printf("%d %d %d\n", integerPart, numerator, denominator);
  37. }
  38. return 0;
  39. }