Perfect, Abundant, Deficient program help

Discussion in 'C' started by Shoothy, May 13, 2010.

  1. Shoothy

    Shoothy New Member

    Joined:
    May 13, 2010
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    I'm supposed to create a program that tells if the users inputted number is perfect a bundant defficient, but the answers are all coming out with big numbers (abundant everytime). Here's the code i have:


    Code:
    #include<iostream>
    #include<string>
    using namespace std;
    int subP(int num){
    int ans[1000];
    for(int x=1;x<=num;x++){
    double test = 0;
    test = num/x;
    if(test == int(num/x)){
    ans[x]=test;
    }
    }
    cout<<endl;
    cout<<num<<endl;
    for(int y=0;y<=num;y++){
    if(ans[y]=0){
    cout<<y<<" ";
    }
    }
    int sum=0;
    for(int z=0;z<num;z++){
    sum=sum+z;
    }
    return sum;
    }
    int main(){
    Start:
    int num=1;
    int sum=0;
    cout<<"Type a number: ";
    cin>>num;
    if(num==0){
    goto end;
    }
    sum = subP(num);
    cout<<endl<<sum;
    if(sum<num)
    cout<<endl<<"Deficient";
    if(sum==num)
    cout<<endl<<"Perfect";
    if(sum>num)
    cout<<endl<<"Abundant";
    cout<<endl<<endl;
    goto Start;
    end:
    cout<<"the end";
    }
    
     
    Last edited by a moderator: May 14, 2010
  2. Isaac Remuant

    Isaac Remuant New Member

    Joined:
    Apr 8, 2010
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    You should indent your code and enclose it between CODE tags for better understanding.

    Also, comments help a great deal. Especially if you're asking for help. If you don't comment your code you won't even be able to understand it after a brief period of time. Having to analyze one's own intentions makes you lose valuable time. So... Make it a habit.

    For example. There's no explanation of what subP is supposed to be doing and it's name is not indicative (At least not for me) of it's purpose.
    Code:
    int subP(int num){
    	int ans[1000];
    	for(int x=1;x<=num;x++){
    		double test = 0;
    		test = num/x;
    		if(test == int(num/x)){
    			ans[x]=test;
    		}
    	}
    ....
    
    Now... Why did you hardcode 1000 for the array? Have you noticed what happens if you input a something bigger? You'll be out of bounds.

    You either define a constant maximum somewhere so the user can't enter a higher value or you have a dynamic array instead of a static one.
    Code:
    if(test == int(num/x))
    why is test a double and not an int?
    Why do you typecase a int / int division? It will always return int. It will only return a floating point number if either one of it's elements is floating point.

    The use of goto is a VERY VERY bad idea. Why did you use them instead of using loops?

    I think you should explain what's your approach and how it's supposed to work. I don't get how you're trying to find if a number is perfect if you're not using the modulus to test if a number is a divisor.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice