So I've been trying to complete this stupid programing problem for the past week or so but I can't figure it out.
the problem is a (seemingly) simple one.
-take an inputed number
-convert it to octal (base eight)
-arrange the digits in the octal number in ascending order
-subtract the re-arranged number, from the octal. in base eight.
-do this 5 times, or until the digits in the octal are in ascending order
-convert back to base 10
heres my code:
I've checked the seperate functions by themselves and they work just fine. its just when i put them together i seem to get junk numbers from no where, or at least I can't find them. If any other programers can assist in pointing out my errors it will be greatly appreciated.PHP Code:
#include <stdAfx.h>
#include <iostream>
using namespace std;
int base_eight(int number);
int sort(int number);
int base_ten(int number);
void main(){
int number;
int sorted;
int counter;
int temp;
for(int ia = 0; ia < 5; ia++){
number = 0;
sorted = 0;
counter = 0;
temp = 0;
system("cls");
cout << "Enter a number: ";
cin >> number;
temp = number;
number = base_eight(number);
while(1){
sorted = sort(number);
sorted = base_ten(sorted);
number = base_ten(number);
if(number == sorted)
break;
number = number - sorted;
number = base_eight(number);
counter++;
if(counter == 5)
break;
}
number = base_ten(number);
cout << number << endl;
system("PAUSE");
}
}
int base_eight(int number){
int place[100];
int first = 0;
int counter = 0;
int octal = 0;
int power;
while(1){
place[counter] = number % 8;
counter++;
first = number / 8;
if(first < 8)
break;
number = first;
}
place[counter] = first;
for(int ia = 0; ia <= counter; ia++){
power = 1;
for(int ib = 0; ib < counter - ia; ib++){
power = power * 10;
}
octal = octal + (place[counter - ia] * power);
}
return octal;
}
int sort(int number){
//will turn 4154 into 1445
int counter = 0;
int digit[101];
int place[101];
int final;
//break the number
while(1){
digit[counter] = number % 10;
if(number == digit[counter])
break;
number = number - digit[counter];
counter++;
number = number / 10;
}
//number the places
for(int ia = 0; ia <= counter; ia++){
place[ia] = 0;
for(int ib = 0; ib <= counter; ib++){
if(ib != ia){
if(digit[ia] < digit[ib]){
place[ia]++;
}
}
}
for(int ic = 0; ic <= counter; ic++){
if(ic != ia){
if(place[ia] == place[ic])
place[ia]++;
}
}
}
for(int ic = 0; ic <= counter; ic++){
for(int id = 0; id < place[ic]; id++){
digit[ic] = digit[ic] * 10;
}
final = final + digit[ic];
}
return final;
}
int base_ten(int number){
int digit[101];
int counter = 0;
int final = 0;
while(1){
digit[counter] = number % 10;
if(number == digit[counter])
break;
number = number - digit[counter];
counter++;
number = number / 10;
}
for(int ia = 0; ia <= counter; ia++){
for(int ib = 0; ib <= counter - ia - 1; ib++){
digit[counter - ia] = digit[counter - ia] * 8;
}
final = final + digit[counter - ia];
}
return final;
}