小数转换为分数形式

#include <stdio.h> #include <stdlib.h> #define MaxDecimalLength 40 typedef struct decimals{ int d; int f; }decimals; int FindGDC(int a,int b) { int i = a<b?a:b; for(;i>1;i--) { if(a%i==0&&b%i==0) return i; } return i; } int powi(int a,int exp){ int i; for(i=0;i<exp;i++) a *= 10; return a; } decimals GetDecimal() { char decimal[MaxDecimalLength]; int d,f; char ds[MaxDecimalLength/2],fs[MaxDecimalLength/2]; decimals t; printf("请输入一个小数:"); scanf("%s",decimal); for(d=0;decimal[d]!='.';d++) fs[d] = decimal[d]; ds[d++] = 0; for(f=0;decimal[d];d++,f++) ds[f] = decimal[d]; fs[f] = 0; d = atol(fs); t.d = powi(1,f); t.f = powi(d,f)+atol(ds); return t; } void ConvertDecimal(decimals dec) { int gdc = FindGDC(dec.f,dec.d); if(dec.f/gdc>dec.d/gdc) printf("分数形式:%d+%d/%d",(dec.f/gdc)/(dec.d/gdc),(dec.f/gdc)%(dec.d/gdc),dec.d/gdc); else printf("分数形式:%d/%d",dec.f/gdc,dec.d/gdc); } int main() { decimals adecimal = GetDecimal(); ConvertDecimal(adecimal); return 0; }

你可能感兴趣的:(struct,include)