Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- /*Funcao calcula o mdc entre dois numeros, e retorna o mdc*/
- int mdc(int a, int b){
- int resto, divimax;
- if (a>b || b!=0) {
- while (resto!=0) {
- resto = a%b;
- a = b;
- b = resto;
- divimax = a;
- }
- }
- if (b==0) {
- divimax=a;
- }
- if (a==0) {
- divimax=b;
- }
- if (a<b || a!=0) {
- while (resto!=0) {
- resto = b%a;
- b = a;
- a = resto;
- divimax = b;
- }
- }
- if (a==b) {
- divimax = a;
- }
- return (divimax);
- }
- /*Funcao inverte digitos, com o auxilio de um loop*/
- /*Divide-se o valor diversar vezes ate encontrar o inverso*/
- int reverterDigitos(int x){
- int i, aux=0;
- for(i=1; i<=x; i=(i*10)){
- aux = aux*10;
- aux = aux+(x%(i*10)-x%i)/i;
- }
- return (aux);
- }
- /*Funcao compara o mdc de dois valores com um terceiro M dado pelo usuario*/
- /*Retorna 1 ou 0, dependendo do caso*/
- int compara(int x, int y, int M){
- int aux1, aux2, ret=0;
- int mdcx, mdcy;
- aux1 = reverterDigitos(x);
- aux2 = reverterDigitos(y);
- if(aux1>aux2) {
- ret=1;
- }
- if(aux1==aux2){
- mdcx = mdc(x,M);
- mdcy = mdc(y,M);
- if(mdcx>mdcy){
- ret=1;
- if((mdcx==mdcy)&&(x<y)){
- ret=1;
- }
- }
- }
- return (ret);
- }
- /*Funcao que escaneia os valores de n e M e ordena a sequencia de numeros*/
- int main () {
- int n, M, j, i;
- int aux;
- int A[502];
- int inverter;
- scanf("%d %d\n", &n, &M);
- for (i=0; i<n; i++) {
- scanf("%d", &A[i]);
- }
- for(j=n-1; j>0; j--) {
- /*Note que inverter serve para vermos se eh para inverter a posicao dos numeros no vetor e nao os numeros em si*/
- for(i=0; i<j; i++){
- inverter=compara(A[i], A[j], M);
- if(inverter==1){
- aux = A[i];
- A[i] = A[j];
- A[j] = aux;
- }
- }
- }
- for (j=0; j<n; j++) {
- printf("%d\n", A[j]);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment