[ANSI C] w jaki sposob zabrać się za ten problem?

0

Muszę napisać program który dla zadanej liczby naturalnej n podaje z ilu różnych cyfr jest ulożony jej zapis oraz wypisuje te cyfry na ekranie w kolejności wzrastającej.

Napisałem coś takiego:

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

int main()
{
  system("cls");  
    
  char liczba[8];
  
  printf("Podaj liczbe naturalna:");
  scanf("%s",&liczba); 
  printf("\n");
 
  int i=0;
  while(liczba[i]!='\0')
  {
    if(liczba[i]=='0')
    { 
     printf("0 ");
     i++;
     printf("\ni:=%d\n",i);
    }
    else
    if(liczba[i]=='1')
    {
     printf("1 ");
     i++;
      printf("\ni:=%d\n",i);
     
    }
    else
    if(liczba[i]=='2')
    {
     printf("2 ");
     i++;
      printf("\ni:=%d\n",i);
    }
    else
    if(liczba[i]=='3')
    {
     printf("3 ");
     i++;
      printf("\ni:=%d\n",i);
    }
    else
    if(liczba[i]=='4')
    {
     printf("4 ");
     i++;
      printf("\ni:=%d\n",i);
    }
    else
    if(liczba[i]=='5')
    {
     printf("5 ");
     i++;
      printf("\ni:=%d\n",i);
    }
    else
    if(liczba[i]=='6')
    {
     printf("6 ");
     i++;
      printf("\ni:=%d\n",i);
    }
    else
    if(liczba[i]=='7')
    {
     printf("7 ");
     i++; 
      printf("\ni:=%d\n",i);
    }
    else
    if(liczba[i]=='8')
    {
     printf("8 ");
     i++;
      printf("\ni:=%d\n",i);
    }
    else
    if(liczba[i]=='9')
    {
     printf("9 ");
     i++;
      printf("\ni:=%d\n",i);
    }
       
}
 
  system("pause");  
  return 0;   
}

Proszę o pomoc odnośnie w/w programu.

 
0

Czy ty widzisz co napisałeś, a jakie jest zadanie!?
Zrób sobie tablice o 10 elementach , łuskaj za pomocą div i mod kolejne cyfry, i podwyższaj odpowiedni element tablicy..
Później wyświetl w pętli tylko te, które są wieksze od 0.. Tyle..

0
 
        long liczba;
	int tab[10],i=0;
	for(int i=0;i<10;i++)
		tab[i]=0;
	scanf("%d",&liczba);
	while(liczba!=0)
	{
		tab[liczba%10]++;
		liczba=liczba/10;
	}
	for(int i=0;i<10;i++)
		if(tab[i]>0)
			printf("%d",i);
0

dzięki kolego za szybką odpowiedź.

0

koledzy jeszcze jeden problem, program działa do 10 cyfr później zwraca np.

Podaj liczbe n:933337771122344
025789
Podana liczba sklada sie z 6 roznych cyfr
Aby kontynuować, naciśnij dowolny klawisz . . .

czym to może być spowodowane ? przecież zakresu dla unsigned long int chyba nie przekracza ?

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

int main(){
 
   
 unsigned long int liczba;   
 int tab[10],i,ile=0;
       for(i=0;i<10;i++)
               tab[i]=0;
       printf("Podaj liczbe n:");        
       scanf("%lu",&liczba);
       while(liczba!=0)
       {
               tab[liczba%10]++;
               liczba=liczba/10;
       }
       for(i=0;i<10;i++)
               if(tab[i]>0){
                       printf("%d",i);
                       ile++;
                       }
                      
printf("\nPodana liczba sklada sie z %d roznych cyfr\n",ile);
system("pause");
 return 0;
 } 
0

Właśnie przekracza.. unsigned long int może mieć wartości od 0 do 4294967295
Zmień to na unsigned long long int, wtedy możesz podac do 18,446,744,073,709,551,615 :)

0

A czasem nie prościej i szybciej wczytać liczbę jako c-string i potem go posortować rosnąco?

0

dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1