Write a program that will accept a fraction of the form N/D, where N is the numerator and D is the denominator and print the decimal representation. If the decimal representation has a repeating sequence of digits, indicate the sequence by enclosing it in brackets. For example, 1/3 = .33333333...is denoted as 0.(3), and 41/333 = 0.123123123...is denoted as 0.(123). Use xxx.0 to denote an integer. Typical conversions are: ios
1/3 = 0.(3) 22/5 = 4.4 1/7 = 0.(142857) 2/2 = 1.0 3/8 = 0.375 45/56 = 0.803(571428)
A single line with two space separated integers, N and D, 1 <= N,D <= 100000.git
45 56
The decimal expansion, as detailed above. If the expansion exceeds 76 characters in length, print it on multiple lines with 76 characters per line.spa
0.803(571428)
/* ID: makeeca1 PROG: fracdec LANG: C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <sstream> #define MAX 1000000 using namespace std; int n,m,pos[MAX]; string s; string getstring(const int n){ std::stringstream newstr; newstr<<n; return newstr.str(); } int main(){ freopen("fracdec.in","r",stdin); freopen("fracdec.out","w",stdout); scanf("%d%d",&n,&m);s=""; if (n%m==0){printf("%d.0\n",n/m);return 0;} s=getstring(n/m)+"."; n=n%m*10; for (;;){ pos[n]=s.size(); s=s+getstring(n/m); n=n%m*10; if (pos[n]!=0) s=s.substr(0,pos[n])+"("+s.substr(pos[n],s.size()-pos[n])+")"; if (n==0 || pos[n]!=0)break; } for (int i=1;i<=s.size();i++){ printf("%c",s[i-1]); if (i%76==0)printf("\n"); } printf("\n"); return 0; }