2014-02-18 9 views
-4

Я пытаюсь создать программу C++, которая при вводе двух чисел (num1, combinationNum) находит два числа, которые умножаются вместе равными num1, но складываются вместе в равную комбинациюNum. В настоящее время он работает для целых положительных чисел, но не отрицателен. Как заставить работать с отрицательными целыми числами? Кроме того, если уравнение не разрешимо, я бы хотел, чтобы он печатал какую-то ошибку. Благодаря! Код:Мой код C++ для факторинга не работает

// 
// 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

Если она работает, прежде чем, почему бы не поставить его обратно в состояние, в котором он работал? Что именно об этом свидетельствует о том, что оно «не работает»? Какой вклад вы дадите, когда вывод неверен? – 2rs2ts

+8

'Это работало раньше, но я слишком много перепутал с этим» - вот почему программисты используют контроль источника. – crashmstr

+1

Извините, но в чем проблема? И если это сработало до того, вы знаете, как заставить его работать, так что просто продолжайте и делайте это. Мы не «черт возьми, я потерял свой код, я получу Интернет, чтобы воссоздать его для меня, потому что я не могу потрудиться за свои ошибки»! –

ответ

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; 
    } 
} 
+0

Я хочу решить: x + y == a, и x * y == a для x и y –

+0

неважно. моя вина. ваш код работает. Благодаря! –

+0

Не могли бы вы объяснить, как это работает или добавлять комментарии? Благодаря! –

Смежные вопросы