标签:
Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.
If the fractional part is repeating, enclose the repeating part in parentheses.
For example,
string fractionToDecimal(int numerator, int denominator) { string result; //deal with the `ZERO` cases if (denominator == 0){ return result; } if (numerator == 0) { return "0"; } //using long long type make sure there has no integer overflow long long n = numerator; long long d = denominator; //deal with negtive cases bool sign = ((float)numerator/denominator >= 0); if ( n < 0 ){ n = -n; } if ( d < 0 ){ d = -d; } if (sign == false){ result.push_back(‘-‘); } long long remainder = n % d; long long division = n / d; ostringstream oss; oss << division; result += oss.str(); if (remainder == 0){ return result; } //remainder has value, the result is a float result.push_back(‘.‘); //using a map to record all of reminders and their position. //if the reminder appeared before, which means the repeated loop begin, //then, get the place from map to insert "(". //(In C++11, it‘s better to use unordered_map ) map<long long, int> rec; for (int pos=result.size(); remainder!=0; pos++, remainder=(remainder*10)%d ) { if (rec.find(remainder) != rec.end()) { result.insert(result.begin()+rec[remainder], ‘(‘); result.push_back(‘)‘); return result; } rec[remainder] = pos; result.push_back((remainder*10)/d + ‘0‘); } return result; }
166. Fraction to Recurring Decimal -- 将除法的商表示成字符串(循环节用括号表示)
标签:
原文地址:http://www.cnblogs.com/argenbarbie/p/5801675.html