我的c ++代码因素并不起作用

时间:2014-02-18 13:36:53

标签: c++ math

我正在尝试创建一个c ++程序,当我输入两个数字(num1,combinationNum)时,它会找到两个相乘的数字等于num1,但加起来等于combinationNum。它目前适用于正整数,但不是负数。如何使用负整数?此外,如果方程不可解,我希望它打印某种错误。谢谢! 代码:

//
//  main.cpp
//  Factor
//
//  Created by Dani Smith on 2/13/14.
//  Copyright (c) 2014 Dani Smith Productions. All rights reserved.
//

#include <iostream>
#include <cmath>
using namespace std;



void factors(int num, int comNum){
int a, b;
cout<<"The factors are ";
bool isPrime = true;
int root = (int)sqrt((double)num);

for(int i = 2; i <= root; i++){
    if(num % i == 0 ){
        isPrime = false;
        //cout<<i<<",";

        for(int x = 0; x<3; x++){
            if(x==1){
                a = i;
            }
            else if(x == 2){
                b = i;
            }
            if(a + b == comNum){
                cout << a << ", and " << b << ".";
            }

        }

    }

}
        //----------------------------------------
if(isPrime)cout<<"1 "; 
cout<<endl; 
}

 int main(int argc, const char * argv[])
{


int num1 = 0, num2 = 0, multiple = 0, combinationNum = 0, output1 = 0, output2 = 0;
cout << "What number do you want to factor?\n";
cin >> num1;
cout << "What do you want them to add to?\n";
cin >> combinationNum;
factors(num1, combinationNum);
return 0;
}

1 个答案:

答案 0 :(得分:0)

要解决:

x + y == a
x * y == b

你必须解决

y == a - x
x * x - a * x + b == 0

使用delta == a * a - 4 * b,如果delta为正,则解决方案为

x1 = (a + sqrt(delta)) / 2
x2 = (a + sqrt(delta)) / 2

代码:(https://ideone.com/qwrSwa

void solve(int sum, int mul)
{
    std::cout << "solution for x + y = " << sum << std::endl
              << "             x * y = " << mul << std::endl;
    const int delta = sum * sum - 4 * mul;
    if (delta < 0) {
        std::cout << "No solution" << std::endl;
        return;
    }
    const float sqrtdelta = sqrtf(delta);
    const float x1 = (sum + sqrtdelta) / 2.f;
    const float x2 = (sum - sqrtdelta) / 2.f;

    std::cout << "x = " << x1 << ", y = " << sum - x1 << std::endl;
    if (delta != 0) {
        std::cout << "x = " << x2 << ", y = " << sum - x2 << std::endl;
    }
}