How to find any greater number from existing number with same set of digits in C

1 Answer

0 votes
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
void swap(char *a, char *b) {
	char tmp = *a;
	*a = *b;
	*b = tmp;
}

int getAnyBigNumber(int n) {
	char s[10];
	
	sprintf(s, "%d", n); 
	
	int i = strlen(s) - 1;
    while (i >= 1) {
        if (s[i] - '0' > s[i - 1] - '0') {
			swap(&s[i], &s[i - 1]);
			break;
		}
        i--;
    }
	int anyBigNumber = atoi(s);
	
	return anyBigNumber == n ? -1 : anyBigNumber;
}
 
int main(void) {
    int n = 76594;
    
	int anyBigNumber = getAnyBigNumber(n);
	printf("%d\n", anyBigNumber);
	
	n = 213;
	anyBigNumber = getAnyBigNumber(n);
	printf("%d\n", anyBigNumber);
	
	n = 17;
	anyBigNumber = getAnyBigNumber(n);
	printf("%d\n", anyBigNumber);
	
	n = 87921;
	anyBigNumber = getAnyBigNumber(n);
	printf("%d\n", anyBigNumber);
	
	n = 333;
	anyBigNumber = getAnyBigNumber(n);
	printf("%d\n", anyBigNumber);
	
    return 0;
}
 
 
 
/*
run:
 
76954
231
71
89721
-1
 
*/

 



answered May 29, 2020 by avibootz

Related questions

...