减少 C 中的分数
Reduce fractions in C
在 c 编程中,当我除以 2/4 之类的 2 个数字时,输出为 0.5,但我想要 1/2。所以我想知道如何执行除法以获得 numerator/denominator 这样的分数形式的答案。我要C.
C 没有内置该功能。但是,您可以做的是编写一个小函数,该函数采用分数值(在您的情况下为 0.5)和 returns 您正在寻找的形式的分数(即 1/2)。
但是记住,1/2不是数字;它是一个字符串(字符数组)。因此,您只能将其用于 display/print 目的;你不能在算术表达式中使用。
抱歉,我无法将其改编为 C,但您肯定可以移植回代码,因为它并不复杂
#include <iostream>
#include <string>
long GreatestCommonMultiple(long& a, long& b);
std::string SimplifyThis(long& a, long& b);
int main(int argC, char** argV)
{
long n1 = 3;
long n2 = 21;
std::cout << "This as simplified fraction: " << n1 << "/" << n2 << " is "<<SimplifyThis(n1, n2)<<std::endl;
return 0;
}
std::string SimplifyThis(long& a, long& b) {
long gcm1 = GreatestCommonMultiple(a, b);
return std::to_string(a / gcm1) + "/" + std::to_string(b / gcm1);
}
long GreatestCommonMultiple(long& a, long& b) {
if (b==0)
{
return a;
}
long x = (a % b);
return GreatestCommonMultiple(b, x);
}
您真正想要的是减少分数..而不是计算除法。
这里有一个快速示例,可以生成减少的分数:
#include <stdbool.h>
#include <stdio.h>
//gcf function - return gcd of two numbers
int gcd(int n, int m)
{
int gcd, remainder;
while (n != 0)
{
remainder = m % n;
m = n;
n = remainder;
}
gcd = m;
return gcd;
}//end gcd function
int main (int argc, const char * argv[]) {
// insert code here...
//--declarations
int number1, number2;
int newNumber1, newNumber2;
//--get user input
printf("Enter a fraction: ");
scanf("%d/%d", &number1, &number2);
//--calculations
//find the gcd of numerator and denominator
//then divide both the numerator and denominator by the GCD
newNumber1 = number1 / gcd(number1, number2);
newNumber2 = number2 / gcd(number1, number2);
//--results
printf("In lowest terms: %d/%d", newNumber1, newNumber2);
}
在 c 编程中,当我除以 2/4 之类的 2 个数字时,输出为 0.5,但我想要 1/2。所以我想知道如何执行除法以获得 numerator/denominator 这样的分数形式的答案。我要C.
C 没有内置该功能。但是,您可以做的是编写一个小函数,该函数采用分数值(在您的情况下为 0.5)和 returns 您正在寻找的形式的分数(即 1/2)。
但是记住,1/2不是数字;它是一个字符串(字符数组)。因此,您只能将其用于 display/print 目的;你不能在算术表达式中使用。
抱歉,我无法将其改编为 C,但您肯定可以移植回代码,因为它并不复杂
#include <iostream>
#include <string>
long GreatestCommonMultiple(long& a, long& b);
std::string SimplifyThis(long& a, long& b);
int main(int argC, char** argV)
{
long n1 = 3;
long n2 = 21;
std::cout << "This as simplified fraction: " << n1 << "/" << n2 << " is "<<SimplifyThis(n1, n2)<<std::endl;
return 0;
}
std::string SimplifyThis(long& a, long& b) {
long gcm1 = GreatestCommonMultiple(a, b);
return std::to_string(a / gcm1) + "/" + std::to_string(b / gcm1);
}
long GreatestCommonMultiple(long& a, long& b) {
if (b==0)
{
return a;
}
long x = (a % b);
return GreatestCommonMultiple(b, x);
}
您真正想要的是减少分数..而不是计算除法。
这里有一个快速示例,可以生成减少的分数:
#include <stdbool.h>
#include <stdio.h>
//gcf function - return gcd of two numbers
int gcd(int n, int m)
{
int gcd, remainder;
while (n != 0)
{
remainder = m % n;
m = n;
n = remainder;
}
gcd = m;
return gcd;
}//end gcd function
int main (int argc, const char * argv[]) {
// insert code here...
//--declarations
int number1, number2;
int newNumber1, newNumber2;
//--get user input
printf("Enter a fraction: ");
scanf("%d/%d", &number1, &number2);
//--calculations
//find the gcd of numerator and denominator
//then divide both the numerator and denominator by the GCD
newNumber1 = number1 / gcd(number1, number2);
newNumber2 = number2 / gcd(number1, number2);
//--results
printf("In lowest terms: %d/%d", newNumber1, newNumber2);
}