Сумма элементов числа.
Лентяев и трутней презираю, поэтому дам ряд наводящих вопросов:
Какую систему исчисления ты используешь?
Как получить цифру в опеределенном разряде зная систему исчисления?
Как сложить числа ты знаешь?
char st;
// для того чтобы посчитать длину числа перевёл его в тип char.
itoa(с, st, 10);
// циклом пробегаюсь по всем элементам числа
for (int m=0;m<strlen(st);m++)
{
summ+=st[m];
}
Но в результате выдаётся сумма не элементов числа, а сумма кодов ASCII этих чисел....
А как мне получить каждый символ в отдельности? c[1], c[2] и т.д. не работают на переменных типа int...
а не проще к числу применить операции деления(/) и остатка (%)
не сказал-бы. все что там осталось сделать, это от каждого аски-кода отнять 30 в шетнадцетиричной СИ.
А как это сделать?
int i = 10;
int Sum = 0;
while(iNumber)
{
Sum += iNumber % i;
iNumber /= i;
}
cout<<Sum<<endl;//будет 24
А в строку как оно по-твоему тогда переводится?
то есть число в строке
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] - 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';
char st;
// для того чтобы посчитать длину числа перевёл его в тип char.
itoa(с, st, 10);
// циклом пробегаюсь по всем элементам числа
for (int m=0;m<strlen(st);m++)
{
summ+=st[m];
}
Но в результате выдаётся сумма не элементов числа, а сумма кодов ASCII этих чисел....
Надо писать
summ+=(st[m] - '0');
ну и Риччи читать...
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);
и в итоге:
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 tmp_str[2] = {0,0};
в цикле
tmp_str[0] = st[m];
summ +=atoi(tmp_str);
и в итоге:
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);
занесла ее в FAQ:
http://forum.codenet.ru/showpost.php?p=160074&postcount=8
замечания в приват, тема закрыта.