Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сумма элементов числа.

21K
07 декабря 2006 года
MCG
5 / / 07.12.2006
Помогите пожалуйста написать простую функцию. Есть число например: 12345. Надо найти сумму его элементов, подскажите как это можно сделать?
3
07 декабря 2006 года
Green
4.8K / / 20.01.2000
Тебе помочь советом или дать возможность списать?
Лентяев и трутней презираю, поэтому дам ряд наводящих вопросов:
Какую систему исчисления ты используешь?
Как получить цифру в опеределенном разряде зная систему исчисления?
Как сложить числа ты знаешь?
21K
07 декабря 2006 года
MCG
5 / / 07.12.2006
Система десятичная. Походив на форуме, и почитав темы, я написал программу:

Код:
int c = 12345, summ;
char st;


// для того чтобы посчитать длину числа перевёл его в тип char.
itoa(с, st, 10);

// циклом пробегаюсь по всем элементам числа           
for (int m=0;m<strlen(st);m++)
{
     summ+=st[m];
}


Но в результате выдаётся сумма не элементов числа, а сумма кодов ASCII этих чисел....
355
07 декабря 2006 года
&lt;SCORP&gt;
786 / / 21.10.2006
логично. ведь ты перевёл число в строку и теперь каждый его элемент-- это символ. ты складываешь коды этих символов.
21K
08 декабря 2006 года
MCG
5 / / 07.12.2006
[QUOTE=<SCORP>;158692]логично. ведь ты перевёл число в строку и теперь каждый его элемент-- это символ. ты складываешь коды этих символов.[/QUOTE]

А как мне получить каждый символ в отдельности? c[1], c[2] и т.д. не работают на переменных типа int...
242
08 декабря 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Система десятичная. Походив на форуме, и почитав темы, я написал программу..


а не проще к числу применить операции деления(/) и остатка (%)

274
08 декабря 2006 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: OlgaKr
а не проще к числу применить операции деления(/) и остатка (%)


не сказал-бы. все что там осталось сделать, это от каждого аски-кода отнять 30 в шетнадцетиричной СИ.

2
08 декабря 2006 года
squirL
5.6K / / 13.08.2003
хы.. а вдруг - таблица символов другая? я к тому что надо максимально универсальные проги смолоду уметь писать ;)
21K
08 декабря 2006 года
MCG
5 / / 07.12.2006
Цитата: Lone Wolf
все что там осталось сделать, это от каждого аски-кода отнять 30 в шетнадцетиричной СИ.



А как это сделать?

5.9K
08 декабря 2006 года
Zushenskiy
161 / / 29.06.2006
да все намного проще
 
Код:
int iNumber = 15321345;
    int i = 10;
    int Sum = 0;
    while(iNumber)
    {
        Sum  += iNumber % i;
        iNumber /= i;
    }
    cout<<Sum<<endl;//будет 24
398
08 декабря 2006 года
Alexandoros
630 / / 21.10.2005
Цитата: Lone Wolf
не сказал-бы. все что там осталось сделать, это от каждого аски-кода отнять 30 в шетнадцетиричной СИ.



А в строку как оно по-твоему тогда переводится?

5.9K
08 декабря 2006 года
Zushenskiy
161 / / 29.06.2006
да ребята если и использовать этот глупый способ для подсчета суммы значений разрядов числа используя перевод числа в строку тогда вы и должны получить также число из элемента строки используя atoi или sprintf. или использовать смещение в таблице кодировки для числа
то есть число в строке
char szBuf[] = "0124";
int i = szBuf[0] - 48;
i += szBuf[1] - 48;
i += szBuf[2] - 48;
i += szBuf[4] - 48;
0 находиться на 48 позиции в таблице кодировке
242
08 декабря 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
да ребята если и использовать этот глупый способ для подсчета суммы значений разрядов числа используя перевод числа в строку тогда вы и должны получить также число из элемента строки используя atoi или sprintf. или использовать смещение в таблице кодировки для числа


только это уже извращение, имхо

398
08 декабря 2006 года
Alexandoros
630 / / 21.10.2005
Цитата: Zushenskiy
да ребята если и использовать этот глупый способ для подсчета суммы значений разрядов числа используя перевод числа в строку тогда вы и должны получить также число из элемента строки используя atoi или sprintf. или использовать смещение в таблице кодировки для числа
то есть число в строке
char szBuf[] = "0124";
int i = szBuf[0] - 48;
i += szBuf[1] - 48;
i += szBuf[2] - 48;
i += szBuf[4] - 48;
0 находиться на 48 позиции в таблице кодировке



Учи -учи, одни двойки.

char szBuf[] = "0124";
int i = szBuf[0] - '0';
i += szBuf[1] - '0';
i += szBuf[2] - '0';
i += szBuf[4] - '0';

242
08 декабря 2006 года
Оlga
2.2K / / 04.02.2006
48d == 30h == коду '0'
355
09 декабря 2006 года
&lt;SCORP&gt;
786 / / 21.10.2006
всё равно вариант с делением и остатком должен работать быстрее. и, что главное, идеологически более правильный
2.0K
09 декабря 2006 года
integral
86 / / 12.11.2005
Цитата: MCG
Система десятичная. Походив на форуме, и почитав темы, я написал программу:

Код:
int c = 12345, summ;
char st;


// для того чтобы посчитать длину числа перевёл его в тип char.
itoa(с, st, 10);

// циклом пробегаюсь по всем элементам числа           
for (int m=0;m<strlen(st);m++)
{
     summ+=st[m];
}


Но в результате выдаётся сумма не элементов числа, а сумма кодов ASCII этих чисел....


Надо писать
summ+=(st[m] - '0');
ну и Риччи читать...

21K
13 декабря 2006 года
MCG
5 / / 07.12.2006
Большое спасибо, всем кто помог с программой.
18K
13 декабря 2006 года
Mind Maker
25 / / 11.12.2006
Цитата: MCG
Система десятичная. Походив на форуме, и почитав темы, я написал программу:

Код:
int c = 12345, summ;
char st;


// для того чтобы посчитать длину числа перевёл его в тип char.
itoa(с, st, 10);

// циклом пробегаюсь по всем элементам числа           
for (int m=0;m<strlen(st);m++)
{
     summ+=st[m];
}


Но в результате выдаётся сумма не элементов числа, а сумма кодов ASCII этих чисел....



добавляем
char tmp_str[2] = {0,0};

в цикле
tmp_str[0] = st[m];
summ +=atoi(tmp_str);

и в итоге:

Код:
int c = 12345,
       summ = 0;
   char st;
   char tmp_str[2] = {0,0};
   
   itoa(с, st, 10);

   for (int m = 0; m < strlen(st); m++)
   {
      tmp_str[0] = st[m];
      summ += atoi(tmp_str);
   }
   printf("summ = %d\n", summ);


+ не зависим от ASCII;
- много инструкций;
3
13 декабря 2006 года
Green
4.8K / / 20.01.2000
Цитата: Mind Maker
добавляем
char tmp_str[2] = {0,0};

в цикле
tmp_str[0] = st[m];
summ +=atoi(tmp_str);

и в итоге:

Код:
int c = 12345,
       summ = 0;
   char st;
   char tmp_str[2] = {0,0};
   
   itoa(с, st, 10);

   for (int m = 0; m < strlen(st); m++)
   {
      tmp_str[0] = st[m];
      summ += atoi(tmp_str);
   }
   printf("summ = %d\n", summ);


+ не зависим от ASCII;
- много инструкций;


М-да... из разряда "В сортир через северный полюс" или "На деревню дедушке через открытый космос".
Я уж не говорю о явных багах приведенного примера:
char st;
itoa(с, st, 10);

63
13 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
К слову - если синтаксис / конст. языка не вбиты намертво в пальцы - не выкладывайте куски кода не проверив, кто-то ведь прочитает, а потом будет жаловаться, что не фурычит...
242
13 декабря 2006 года
Оlga
2.2K / / 04.02.2006
думаю хватит извращений в решении этой простой проги.
занесла ее в FAQ:
http://forum.codenet.ru/showpost.php?p=160074&postcount=8
замечания в приват, тема закрыта.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог