USACO 2.4.5 Fractions to Decimals

来源:互联网 发布:江宁高新园网络问政 编辑:程序博客网 时间:2024/05/07 01:35
以前做过这题,没什么特别思路,手工模拟除法即可。
问题是这蛋疼的输出格式,让我纠结了好久。
偶然看到了一个叫sprintf的逆天的东西!居然写到了50行以内啊!
庆祝一下~

C++语言: 2.4.5 fracdec/*PROG:fracdecLANG:C++*/#include <cstdio>#include <cstring>using namespace std;const int MAXDIGIT = 100010;char ans[MAXDIGIT];char dec[MAXDIGIT];int last[MAXDIGIT];int num, den, rem, k;int main(){   freopen("fracdec.in", "r", stdin);   freopen("fracdec.out", "w", stdout);   memset(last, -1, sizeof(last));   scanf("%d%d", &num, &den);   sprintf(ans, "%d.", num/den);   rem = num % den;   for (int i = 0;;i++)   {       if (rem == 0)       {           if (i == 0)               sprintf(ans+strlen(ans), "%d", 0);           else               sprintf(ans+strlen(ans), "%s", dec);           break;       }       if (last[rem] != -1)       {           k = last[rem];           sprintf(ans+strlen(ans), "%.*s(%s)", k, dec, dec+k);           break;       }       last[rem] = i;       num = rem * 10;       dec[i] =  num/den + '0';       rem = num % den;   }   for (int i = 0;i < strlen(ans);i += 76)       printf("%.76s\n", ans+i);}