Προς το περιεχόμενο

εφαρμογή στη C


alfas

Προτεινόμενες αναρτήσεις

Δημοσ.

Γίνεται στην C++ να γράψω έναν αριθμό... και αυτο τον αριθμό να μου τον γράφει αντίστροφα?

Δηλαδή να του βάζω 12345 και να μου τον εμφανίζει 54321

Υπάρχει κάποιο site να το συμβουλευτώ?

Δημοσ.

Μπορείς για παράδειγμα να μετατρέπεις τον αριθμό σε string (με την itoa( ) για παράδειγμα), να κάνεις την αντιστροφή στο string και στη συνέχεια να το ξαναμετατρέπεις σε integer (με την atoi( ) ).

Βέβαια πολύ πιθανό να υπάρχει και πιο εύκολος τρόπος...

Δημοσ.

Παρακάτω παραθέτω ένα πρόγραμμα γραμμένο σε C που αντιστρέφει έναν δοθέντα αριθμό και με και χωρίς την βοήθεια πινάκων χαρακτήρων. Σε γενικές γραμμές πρόκειται για την υλοποιήση όσων έχουν αναφερθεί από τους παραπάνω.

 

>
//---------------------------------------------------------------------------

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

//---------------------------------------------------------------------------

/* Return the number of digits of number N. */
int Length(unsigned int N)
{
static int nLen;
for(nLen = 0; N > 0; N /= 10, nLen++);
return nLen;
}
/* Reverse the digits of a given number. */
unsigned int ReverseNumber(unsigned int N)
{
/* Return Value. */
unsigned int revN = 0;
/* Get the number of digits of the given number. */
int nLen = Length(N);
/* If there is only one digit return the number. */
if(nLen == 1)
	return N;
else
{
       /* Declare variables used. */
	static int Index, exp;
	unsigned int Digit = 0;
	/* Save the length for other use. */
	exp = nLen;
	/* Loop to do the job. */
	for(Index = 0; Index < nLen; Index++)
	{
		Digit = N % 10;
		revN += Digit * pow(10, --exp);
		N /= 10;
	}
	/* Return the number. */
	return revN;
}
}

/* Reverse a string. */
char *_strRev(char *str)
{
if(!str)
	return NULL;
else
{
	static int Index = 0;
	int nLen = strlen(str);
	for(Index = 0; Index < nLen; Index++)
	{
		char c = str[index];
		str[index] = str[nLen-1];
		str[nLen-1] = c;
		nLen--;
	}
       return str;
   }
}

/* Reverse a given number as it was a string. */
int ReverseNumberString(unsigned int N)
{
unsigned int revN;
int nLen = Length(N);
if(nLen == 1)
	return N;
else
{
	/* Pointer to a string. */
	char *revStr = NULL;
	/* Create a null terminated string with the number. */
	char TNumber[bUFSIZ] = "";
	sprintf(TNumber, "%d", N);
	if(!strlen(TNumber))
	{
		printf("Error in number representation.\n");
		return -1;
	}
	/* Reverse the string. */
	revStr = _strRev(TNumber);
	/* Get the number from the reversed string. */
	revN = atoi(revStr);
	/* Return the number. */
	return revN;
   }
}

/* Main Code. */
int main(int argc, char* argv[])
{
int N;
printf("Enter a number: ");
scanf("%d", &N);
printf("Reversed number: %d\n", ReverseNumber(N));
printf("Reversed number with string help: %d\n", ReverseNumberString(N));
getchar();
printf("Hit enter to continue...\n");
getchar();
return 0;
}
//---------------------------------------------------------------------------

 

Εκτυπωμένα αποτελέσματα:

 

Enter a number: 123456789

Reversed number: 987654321

Reversed number with string help: 987654321

Hit enter to continue...

 

**Άτιμη θητεία....

Δημοσ.

Έχεις δίκιο μάλλον δεν την παλεύω... Που να βγω έξω να πάω με τον καιρό να βρέχει ακατάπαυστα γαμώτο μου;

 

Off topic....

Δημοσ.

Σας ευχαριστώ παιδιά όλους... Τρόπος εκτός των string υπάρχει γιατί εγώ κάτι τέτοιο δεν το έχω μάθει ακόμα!! :(

Kαι δυστυχώς δεν μπορώ να κάνω χρήση τους!!!

Δημοσ.
Σας ευχαριστώ παιδιά όλους... Τρόπος εκτός των string υπάρχει γιατί εγώ κάτι τέτοιο δεν το έχω μάθει ακόμα!! :(

Kαι δυστυχώς δεν μπορώ να κάνω χρήση τους!!!

 

κοιτα, το να αντιστρεψεις ενα νουμερο ετσι δεν εχει νοημα.

ειναι οπως λεμε ο αριθμος του τηλεφωνου, δεν ειναι αριθμος στη πραγματικοτητα (δε μπορεις να τον προσθαφαιρεσεις ας πουμε), ειανι ενας κωδικας που απλα περιεχει συμβολα μεταξυ 0 και 9

 

αρα αυτο που θες στη πραγματικοτητα ειναι να αντιστρεψεις ενα στρινγκ που περιεχει χαρακτηρες 0...9

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...