Приведение числа и нескольких цифр в одно число длиной 1 символ :)

Тема в разделе "WASM.BEGINNERS", создана пользователем ilja_, 15 фев 2011.

  1. ilja_

    ilja_ New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    33
    Всем привет, извиняюсь за дурацкую формулировку темы.
    Мучался, но ничего не получается видимо из за плохих знаний языка, пишу на си.
    Есть число int a = 98745; моя задача, привести это число в одно путем сложения, т.е. 9 + 8 + 7 + 4 + 5 = 33, далее 33 - это два числа 3 и 3, 3 + 3 = 6, т.е. нужно программно получить число 6.
    пните плз мыслью как это сделать.
     
  2. ilja_

    ilja_ New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    33
    точнее, как разбить на массив переменную a, вот в чем сложность.
     
  3. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    цифровой корень
    http://stepanov.lk.net/gardner/mmm/mmm7.html
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    ilja_
    Не нужно ничего разбивать. Задачка на простую арифметику. Эта сумма равна остатку от деления на 9... ну с поправкой на то, что нуль в остатке соответствует девятке при нахождении суммы цифр. Т.е. с учётом поправки код примерно такой:
    result = ((num % 9) + 8) % 9 + 1;
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    ilja_
    По этому поводу легко найти опенсорц, хотя решение l_inc красивее того, что там.
     
  6. ilja_

    ilja_ New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    33
    Всем спасибо за ответы :)
    Сделал так:

    Код (Text):
    1. DWORD dwSum = 4956;
    2.  
    3.     DWORD b[4];
    4.  
    5.     b[0] = dwSum % 10; // 6
    6.     b[1] = ( dwSum / 10 ) % 10; // 5
    7.     b[2] = ( ( dwSum / 10 ) / 10 ) % 10; //9
    8.     b[3] = (  ( ( dwSum / 10 ) / 10 ) / 10 ) % 10; //4
    осталось сделать все в цикле
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    ilja_
    в цикле суммируете остатки от деления на 9, до тех пор пока не получите нулевое частное, потом тоже самое с суммой и так пока суммы не кончатся
     
  8. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    На 10 вообще-то...

    Вот реализация в лоб:

    Код (Text):
    1. int mega_sum(int x)
    2. {
    3.     int tmp, sum=x;
    4.     while(sum/10)
    5.     {
    6.         tmp=sum; sum=0;
    7.         while(tmp)
    8.         {
    9.             sum+=tmp % 10;
    10.             tmp/=10;
    11.         }
    12.     }
    13.     return sum;
    14. }
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    cppasm
    точно
     
  10. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    cppasm
    Как-то слишком длинно
    Код (Text):
    1. while(x>9)
    2.   x-=x/10*9
    разве не симпатичнее?
     
  11. lamerkz666

    lamerkz666 New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2008
    Сообщения:
    10
    Black_mirror
    .)
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Black_mirror
    Не то, чтобы я этим очень гордился, но, по-моему, у меня всё равно короче. :)
     
  13. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    l_inc
    У тебя 0 не правильно обрабатывается (сумма цифр нуля явно не 9), а если считать что num больше нуля, то короче будет result = (num - 1) % 9 + 1;
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Black_mirror
    Ладно, убедили. :) У Вас короче.
     
  15. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    а так нельзя?
    Код (Text):
    1. r = num % 9;
    2. r = (r == 0 ? (a == 0 ? 0 : 9) : r);
     
  16. ilja_

    ilja_ New Member

    Публикаций:
    0
    Регистрация:
    27 май 2010
    Сообщения:
    33
    Большое спасибо всем :) очень помогли.