既約分数に変換 | spin on the RITZ

既約分数に変換

#include <stdio.h>
#include <ctype.h>
#include <math.h>

void tofraction(char *);
long power10(int n);
int gcd(long x, long y);

int main(void)
{
    char *str = "-0.125";

    tofraction(str);

    return 0;
}

void tofraction(char *str)
{
    long numerator = 0;
    long denominator;
    int flag = 0;
    int n = 0;
    int k = 0;
    long measure;

    while(*str != '\0'){
        if(isdigit(*str)){
            numerator *= 10;
            numerator += *str - '0';
            if (flag == 1) n++;
            if (flag == 2) k++;
        }else if(*str == '.'){
            flag = 1;
        }else if(*str == '{'){
            flag = 2;
        }
        str++;
    }

    if(flag != 2) {
        denominator = power10(n); 
    }else{
        denominator = power10(n) * (power10(k) - 1);
        numerator  -= numerator / power10(k);
    }

    measure = gcd(numerator, denominator);
    numerator /= measure; 
    denominator /= measure;
    printf("= %ld/%ld\n", numerator, denominator);
}

long power10(int n)
{
    return (int)(pow(10, n));
}

int gcd(long x, long y)
{
    if(y != 0)
        return gcd(y,x%y);
    else
        return x;
}



平成20年春季基本情報技術者試験

午後・問10



とりあえず、なるものはなる!として考えれば、大した問題じゃない。

でも、なんでだろうねぇ。


半年くらいかけてFEの勉強やるんだろうけど、ぶっちゃけもう3ヶ月しかない件について。