# Thread: Need help on factoring program.

1. ## Need help on factoring program.

I'm diving into C++ and after going through some the tutorials on CProgramming.com, I saw a challenge to make a program factor a number using recursion. So I had to do it. The program through each instance finds the right factor and the right number of loops, but and the end when I print the linked list out it's all the last value I found. I feel like I'm close on this and need some help.

Code:
// class1.cpp: implementation of the class1 class.
//
//////////////////////////////////////////////////////////////////////

#include "class1.h"
#include "iostream.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

class1::class1()
{

}

class1::~class1()
{

}

struct fact {
int val;
fact *next;
};

void GO(int *srcNum, fact *srcFact) {
bool chgsrc;
fact *tmpFact;
tmpFact=new fact;

srcFact->next=new fact;
srcFact=srcFact->next;
srcFact->next=0;
srcFact->val=0;

chgsrc = 1;

if (*srcNum != 1) {
if (*srcNum % 2 == 0) {
srcFact->val=2;
if (chgsrc) {
*srcNum=*srcNum / 2;
cout<<"- "<<*srcNum<<endl;
cout<<srcFact->val<<endl;
cout<<srcFact<<endl;
//tmpFact=tmpRoot;
//if(tmpFact!=0)
//{
//while(tmpFact->next!=0)
//{
//cout<<tmpFact->val<<" - "<<tmpFact<<endl;
//tmpFact=tmpFact->next;
//}
//cout<<tmpFact->val<<endl;
//}

cout<<endl;
chgsrc = 0;
}
}

if (*srcNum % 3 == 0) {
srcFact->val=3;
if (chgsrc) {
*srcNum=*srcNum / 3;
cout<<"- "<<*srcNum<<endl;
cout<<srcFact->val<<endl;
cout<<srcFact<<endl;
cout<<endl;
chgsrc = 0;
}
}

if (*srcNum % 5 == 0) {
srcFact->val=5;
if (chgsrc) {
*srcNum=*srcNum / 5;
cout<<"- "<<*srcNum<<endl;
cout<<srcFact->val<<endl;
cout<<srcFact<<endl;
cout<<endl;
chgsrc = 0;
}
}

if (*srcNum % 7 == 0) {
srcFact->val=7;
if (chgsrc) {
*srcNum=*srcNum / 7;
cout<<"- "<<*srcNum<<endl;
cout<<srcFact->val<<endl;
cout<<srcFact<<endl;
cout<<endl;
chgsrc = 0;
}
}
}

if (srcFact->val != 0) {
GO(srcNum, srcFact->next);
} else {
//srcFact->val = *srcNum;
}

};

int main() {
fact *root;
fact *nxtFact;
int numtochk;

numtochk = 30;

nxtFact = new fact;
root=new fact;
root->next=0;
root->val=1; //Make this 1 because a factorial is atleast that number times 1.

nxtFact = root;

GO(&numtochk, nxtFact);

//NOW I WANT TO SEE ALL MY VALUES
nxtFact=root; //Lets go back to the beginning
if(nxtFact!=0)
{
while(nxtFact->next!=0)
{
cout<<nxtFact->val<<" - "<<nxtFact<<endl;
nxtFact=nxtFact->next;
}
cout<<nxtFact->val<<endl;
}

return 0;
}

2. The final if statement in the GO function, I had mistyped. It should be:

Code:
if (srcFact->val != 0) {
GO(srcNum, srcFact);
} else {
//srcFact->val = *srcNum;
}

3. ## Found problem

The main problem was with the if code block for each base prime. Amongst other small corrections I made in the code the correct if statement should be:

Code:
if (*srcNum % 2 == 0) {
if (chgsrc) {
srcFact->val=2;
*srcNum=*srcNum / 2;
chgsrc = 0;
}
}