Guest User

Untitled

a guest
Jan 1st, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[]);
  5. unsigned long pot10(char potenssi);
  6. unsigned long int temppu(unsigned long int luku, unsigned long int edellinen);
  7.  
  8. unsigned long pot10(char potenssi) {
  9.     unsigned long paluuarvo=1;
  10.     if (potenssi==0) return paluuarvo;
  11.     else if (potenssi > 0) {
  12.         do {
  13.             paluuarvo*=10;
  14.             potenssi--;
  15.         } while (potenssi>0);
  16.         return paluuarvo;
  17.     }
  18.     return 0;
  19. }
  20. int main(int argc, char *argv[]) {
  21.     char *endptr=NULL;
  22.     if(argc==2) {
  23.         temppu(strtoul(argv[1],&endptr,10),0);
  24.     } else {
  25.         printf("Anna komennon %s parametriksi luku ", argv[0]);
  26.         printf("väliltä 10-%lu\n",((unsigned long int)0-1)/9);
  27.     }
  28. return 0;
  29. }
  30. unsigned long int temppu(unsigned long int luku, unsigned long int edellinen)
  31. {
  32.     unsigned long int apuluku=luku,vasen=0,oikea=0;
  33.     unsigned char numero=0,numeroita=0,maxnumero=0,sijainti=0;
  34.     if(luku==0 || luku>((unsigned long int)0-1)/9) {
  35.         printf("Luvun on oltava väliltä 10-%lu\n",((unsigned long int)0-1)/9);
  36.         return 0;
  37.     }  
  38.     while(1) {
  39.         numeroita++;
  40.         if(apuluku>(((unsigned long int)0-1)/9)) return 0;
  41.         if(apuluku>9) {
  42.             numero=apuluku-((apuluku/10)*10);
  43.             if(numero>=maxnumero) {
  44.                 maxnumero=numero;
  45.                 sijainti=numeroita;
  46.             }          
  47.             apuluku=apuluku/10;
  48.         } else {
  49.             numero=apuluku;
  50.             if(numero>=maxnumero) {
  51.                 maxnumero=numero;
  52.                 sijainti=numeroita;
  53.             }
  54.             break;
  55.         }
  56.     }
  57.     printf("Luku: %lu",luku);
  58.     printf(", max.numero = %u",maxnumero);
  59.     vasen=luku/pot10(sijainti);
  60.     vasen=vasen*pot10(sijainti-1);
  61.     oikea=luku/pot10(sijainti-1);
  62.     oikea=oikea*pot10(sijainti-1);
  63.     oikea=luku-oikea;
  64.     vasen=vasen+oikea;
  65.     apuluku=maxnumero*vasen;
  66.     printf(", uusi luku on %u x %lu -> %lu\n",maxnumero,vasen,apuluku);
  67.     if(apuluku>9 && apuluku<(((unsigned long int)0-1)/9)) {
  68.         if(apuluku!=edellinen) temppu(apuluku,luku);
  69.     }
  70.     return apuluku;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment