Problem Description
难度:简单 / 中等
a. 给出一系列以 a1/b1,a2/b2 这样表示的分数,返回它们的和约分后的形式。
b. 给定一个一维数组 a,求满足 i < j 并且 a[i] < a[j] 的元素对中 a[j] - a[i] 的最大值。
Implementation
a. 给出一系列以 a1/b1,a2/b2 这样表示的分数,返回它们的和约分后的形式。
string FractionSum(string A, string B) {
int len_A = size(A);
int len_B = size(B);
if(!len_A) {
return "ERROR_A";
}
if(!len_B) {
return "ERROR_B";
}
int nomi[2] = {0}, denom[2] = {0};
getNum(nomi[0], denom[0], A, len_A);
getNum(nomi[1], denom[1], B, len_B);
if(!denom[0] || !denom[1]) {
return "MAX_NUM";
}
return getSimplyFormtat(nomi[0]*denom[1]+nomi[1]*denom[0], denom[0]*denom[1]);
}
string getSimplyFormat(int nom, int denom)
{
int pubDenom = findPublicDenom(nom > denom?nom:denom, nom>denom?nom:denom);
return to_string(nom/pubDenom) + "/" + to_string(denom/pubDenom);
}
int dindPublicDenom(int bigger, int smaller)
{
int tmp = 1;
while(bigger - smaller != 0) {
tmp = bigger - smaller;
if(tmp > smaller) {
bigger = tmp;
}
else {
bigger = smaller;
smaller = tmp;
}
}
return tmp;
}
void getNum(int &nomi, int &denom, string A, int len_A) {
bool div = false;
for(int idx = 0; idx < len_A; idx++) {
if(isdigit(A[idx])) {
if(div) {
denom[0] = 10*denom[0] + (A[idx]-'0');
}
else {
nomi[0] = 10*nomi[0] + (A[idx] - '0');
}
}
else if(A[idx] == '/') {
div = ture;
}
}
}
b. 给定一个一维数组 a,求满足 i < j 并且 a[i] < a[j] 的元素对中 a[j] - a[i] 的最大值。
int findLargestDiff(vector<int>& nums)
{
int res = 0;
int size = nums.size();
if(!size) {
return res;
}
for(int idx0 = 0; idx0 < size - 1; idx0++) {
for(int idx1 = idx0 + 1; idx1 < size; idx1++) {
res = max(nums[idx1] - nums[idx0], res);
}
}
return res;
}