logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać funkcję sumującą cyfry liczby, np. 1234567 → 1+2+3+4+5+6+7?

zaq121 14 Gru 2006 22:27 1071 6
REKLAMA
  • #1 3332246
    zaq121
    Poziom 1  
    Posty: 1
    Witam.
    Czy może mi ktoś pomóc?? przygotowuje sie do matury z informatyki. Dostaliśmy do rozwiązania 200 zadań. Czy jest funkcja która liczy sume liczby np. jak mamy liczbe 1234567 to liczy mi 1+2+3+4+5+6+7 ??? Prosze o odpowiedź.

    Dziekuje z góry.
  • REKLAMA
  • #2 3332279
    Sam Sung
    Poziom 33  
    Posty: 2023
    Pomógł: 227
    Ocena: 601
    Chodzi ci o funkcję w jakimś konkretnym języku programowania czy może o zapis matematyczny?
  • REKLAMA
  • #3 3332468
    monsinior
    Poziom 17  
    Posty: 162
    Pomógł: 18
    Ocena: 7
    Bez względu na język najlepiej sam napisz tą funkcję.
    Ide algorytmu jest taka mamy np. liczbę 1234567 to wyciagnąć odpowiednie cyfry możemy dzieki modulo

    jednosci = 1234567 mod 10 //w wyniku masz 7
    dziesiatki = ( 1234567 / 10 ) mod 10 // w wyniku masz 6
    setki = ( 1234567 / 100) mod 10 //masz 5

    itd.
    To jest przykładowy algorytm jest bardzo dużo sposobów na tą funkcję
  • REKLAMA
  • #4 3335116
    Łuk_F
    Poziom 17  
    Posty: 257
    Pomógł: 34
    Ocena: 12
    witam

    Przyklad w jezyku pascal:

    
    liczba:=1234567;
    suma:=0;
    while (liczba<>0) do
    begin
    suma:=suma+liczba mod 10;
    liczba:=liczba div 10;
    end;
    
  • #5 3335263
    kordan11
    Poziom 18  
    Posty: 241
    Pomógł: 24
    Ocena: 10
    ja bym to zrobił tak
    
    int liczba=1234567;
    int max=liczba%10; //dzielenie modulo
    int wynik=(max*max+max)/2; //z własności ciągu geometrycznego
    
  • REKLAMA
  • #6 3335426
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    kordan11 napisał:
    ja bym to zrobił tak
    
    int liczba=1234567;
    int max=liczba%10; //dzielenie modulo
    int wynik=(max*max+max)/2; //z własności ciągu geometrycznego
    


    Myslę że 1234567 było tylko przykłądem i nie zawsze podana liczba będzie ciągiem arytm. :P
  • #7 3347102
    pablomis
    Poziom 11  
    Posty: 13
    Pomógł: 2
    Ocena: 1
    A ja zasugerowałbym takie rozwiązanie.
    Można zapewne jeszcze popracować nad wersją optymalną ale na początek myśle, że wystarczy:

    
    #include <stdio.h>
    
    int main(void)
    {
       const unsigned long count=33112233;
       unsigned int tmp_var=count;
       unsigned int old_var;
       unsigned int sum=0;
       unsigned int counter=1;
       
       do
       {
           old_var=tmp_var%10;
           counter++;
           sum+=old_var;
           tmp_var=(tmp_var-old_var)/10;
       }while(tmp_var>0);
       printf("oryginal value=%d\ndigital sum=%d \n\n\n",count,sum);
    
       return 0;
    }
    


    powodzenia

Podsumowanie tematu

✨ Dyskusja dotyczy sposobu napisania funkcji sumującej cyfry liczby, np. 1234567 → 1+2+3+4+5+6+7. Zaproponowano podejście algorytmiczne wykorzystujące operacje modulo i dzielenia całkowitego do wyodrębniania kolejnych cyfr liczby. Przykłady implementacji podano w językach Pascal i C. W Pascalu użyto pętli while, która dodaje resztę z dzielenia liczby przez 10 do sumy i dzieli liczbę przez 10, aż do zera. W C zastosowano pętlę do-while z analogicznym mechanizmem. Podkreślono, że nie istnieje uniwersalna wbudowana funkcja sumująca cyfry, dlatego najlepiej samodzielnie napisać taką funkcję. Zwrócono uwagę, że liczba 1234567 była przykładem i nie zawsze cyfry tworzą ciąg arytmetyczny, co wyklucza uproszczone wzory matematyczne. Omówiono także podstawy algorytmu i różne metody wyciągania cyfr z liczby.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA