gpt4 book ai didi

c++ - 来自给定输入的理性算术

转载 作者:行者123 更新时间:2023-11-30 05:40:12 25 4
gpt4 key购买 nike

我目前正在研究 https://open.kattis.com/problems/rationalarithmetic供自己练习。我得到 4 位数字和一个操作。输入是:x1 y1 op x2 y2,分数是 x1/y1 和 x2/y2。如果我得到输入:1 3 + 1 2 那么它是 1/3 + 1/2,答案应该是最小分形,所以它是 5/6。我通过了我得到的测试用例,但我无法弄清楚我做错了什么。总结一下我的做法:

  1. 读取输入并检查操作是否为 +、-、/或 *。我生成一个素数数组来找到最大公约数。
  2. 根据输入的操作将输入发送到函数。
  3. 我用简单的数学计算给定的输入。
  4. 然后我找到最大公约数并用它除以分子和分母。
  5. 然后我打印出结果。

这是主要功能以及如果操作是*我如何处理。我以相同的方式处理其他操作,但使用其他数学。

     void mult(int *x1, int *y1, int *x2, int *y2){
long long top = (*x1) * (*x2);
long long bottom = (*y2) * (*y1);
long long frac;
if(bottom != 0||top != 0){
frac = commonDiv(top,bottom);
}else{
frac = 1;
}
string sign = "";
if(top * bottom < 0){
sign = "-";
}else{
sign = "";
}
printf("%s%lld / %lld\n",sign.c_str(),abs(top/frac),abs(bottom/frac) );
}


int main()
{

int numOp;
scanf("%d", &numOp);
getPrime(1,sqrt(100000));
while(numOp != 0){
int x1,x2,y1,y2;
char op[2];
scanf("%d %d %s %d %d", &x1, &y1, op, &x2, &y2);
if( op[0] == '+'){
add(&x1, &y1, &x2,&y2);
}
else if(op[0] == '-'){
sub(&x1,&y1,&x2,&y2);
}
else if(op[0] == '/'){
divi(&x1,&y1,&x2,&y2);
}
else{
mult(&x1,&y1,&x2,&y2);
}
numOp--;
}
}

这是我的代码和给定的测试用例,我得到了正确的结果。我需要一些关于不同测试用例或任何建议的提示。 http://ideone.com/jBddSI

最佳答案

我会建议您以下几点:在处理有理数时忘记使用素数列表寻找最大公约数。这就是我们在学校所学的内容,但是在编程时可以使用 Euclid's algorithm 更轻松(有效)地解决此任务。

关于c++ - 来自给定输入的理性算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31828681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com