Jetzt erhalte ich auf meinem Notebook ein anderes Ergebnis als auf dem eines Freundes. (beides XP, Pentium, auf beiden QT4 kompiliert)
Wie kann das zustande kömmen?
Ich verwende modulo und habe die divison als schriftliche nachgebaut:
Hier mein Quelltext:
Code: Alles auswählen
/*################################################
function: division_big ( )
assignment: division
parameter: int i_ptr = pointer of the value that has to be divide
int i_len = count of the value that has to be divide
return: pointer of the results or err_nr
#################################################*/
void division_big(RESULTS *res, int *i_ptr, int i_len, std::ostream& outfile)
{
int divisors [11] = {3,4,5,7,11,12,13,17,19,37,73}, *i_ptr_divisors;
i_ptr_divisors = divisors;
int *start_arr;
start_arr = i_ptr;
int* i = new int(0);
int* j = new int(1);
do{
i_ptr = start_arr; // pointer vom Anfang der Zahl die diviert wird
int k, i_log, i_erg, i_x ,i_rest=0;
for ( k=0; k<i_len; k++, i_ptr++)
{
i_log = log10( *i_ptr )+1; // log10 gibt mir die Stellen der aktuellen Zahl aus; x<1 -> x=1
i_x = pow ( 10, i_log-1 );
if ( *i_ptr == 0)
i_log = 1;
i_erg = ( *i_ptr + pow ( 10, i_log ) * i_rest ); // zum Teilerg. wird der rest von der letzten divison hinzuaddiert
i_rest = i_erg%*i_ptr_divisors; // rest ermitteln
}
if (i_erg%*i_ptr_divisors == 0) {
switch (*i_ptr_divisors){
case (3): res->results += "3,"; break;
case (4): res->results += "4,"; break;
case (5): res->results += "5,"; break;
case (7): res->results += "7,"; break;
case (11): res->results += "11,"; break;
case (12): res->results += "12,"; break;
case (13): res->results += "13,"; break;
case (17): res->results += "17,"; break;
case (19): res->results += "19,"; break;
case (37): res->results += "37,"; break;
case (73): res->results += "73"; break;
}
*j = 2; // set switch if somehow value is selected
}
*i +=1;
i_ptr_divisors++;
} while( *i < 11);
if ( *j==1) res->results += "0"; // set zero if nothing is selected or the value is zero
*j = res->results.rfind(","); // to erase the last comma
*i = res->results.length();
if (*j != -1) if ( (*i-*j) ==1 ) res->results.erase( *j, *i);
delete i;
delete j;
outfile<<setfill(' ')<<setw(20)<<left<<res->results;
}