Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char *argv[]);
- unsigned long pot10(char potenssi);
- unsigned long int temppu(unsigned long int luku, unsigned long int edellinen);
- unsigned long pot10(char potenssi) {
- unsigned long paluuarvo=1;
- if (potenssi==0) return paluuarvo;
- else if (potenssi > 0) {
- do {
- paluuarvo*=10;
- potenssi--;
- } while (potenssi>0);
- return paluuarvo;
- }
- return 0;
- }
- int main(int argc, char *argv[]) {
- char *endptr=NULL;
- if(argc==2) {
- temppu(strtoul(argv[1],&endptr,10),0);
- } else {
- printf("Anna komennon %s parametriksi luku ", argv[0]);
- printf("väliltä 10-%lu\n",((unsigned long int)0-1)/9);
- }
- return 0;
- }
- unsigned long int temppu(unsigned long int luku, unsigned long int edellinen)
- {
- unsigned long int apuluku=luku,vasen=0,oikea=0;
- unsigned char numero=0,numeroita=0,maxnumero=0,sijainti=0;
- if(luku==0 || luku>((unsigned long int)0-1)/9) {
- printf("Luvun on oltava väliltä 10-%lu\n",((unsigned long int)0-1)/9);
- return 0;
- }
- while(1) {
- numeroita++;
- if(apuluku>(((unsigned long int)0-1)/9)) return 0;
- if(apuluku>9) {
- numero=apuluku-((apuluku/10)*10);
- if(numero>=maxnumero) {
- maxnumero=numero;
- sijainti=numeroita;
- }
- apuluku=apuluku/10;
- } else {
- numero=apuluku;
- if(numero>=maxnumero) {
- maxnumero=numero;
- sijainti=numeroita;
- }
- break;
- }
- }
- printf("Luku: %lu",luku);
- printf(", max.numero = %u",maxnumero);
- vasen=luku/pot10(sijainti);
- vasen=vasen*pot10(sijainti-1);
- oikea=luku/pot10(sijainti-1);
- oikea=oikea*pot10(sijainti-1);
- oikea=luku-oikea;
- vasen=vasen+oikea;
- apuluku=maxnumero*vasen;
- printf(", uusi luku on %u x %lu -> %lu\n",maxnumero,vasen,apuluku);
- if(apuluku>9 && apuluku<(((unsigned long int)0-1)/9)) {
- if(apuluku!=edellinen) temppu(apuluku,luku);
- }
- return apuluku;
- }
Advertisement
Add Comment
Please, Sign In to add comment