既約分数に変換
#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年春季基本情報技術者試験
とりあえず、なるものはなる!として考えれば、大した問題じゃない。
でも、なんでだろうねぇ。
半年くらいかけてFEの勉強やるんだろうけど、ぶっちゃけもう3ヶ月しかない件について。