Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
0 / 0 / 1
Регистрация: 17.11.2011
Сообщений: 20
1

Вывести сумму цифр числа

17.11.2011, 16:41. Показов 4167. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
смысл задачи такой : мы вводим двузначное число ,нужно вывести сумму его цифр ,если сумма цифр снова двузначное число ,то снова складываем эти цифры ,и так до тех пор ,пока не получится однозначное цисло .И еще ,нужно вывести количество операций которые мы выполняем при этом вот пример : вводим 10 выводится 1 0
вводим 88 выводится 7 2

большая просьба решить через string ,
 Комментарий модератора 
Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2011, 16:41
Ответы с готовыми решениями:

От данного числа N вычтем сумму цифр этого числа, от полученного числа опять вычтем сумму цифр и т.д. до тех пор, пока число положительно
И опять: сколько можно? Задано натуральное число N. От данного числа вычтем сумму цифр этого...

Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и сумму этих цифр. Вывести на экран каждое число, количес
Дана последовательность n натуральных чисел. Для каждого числа вычислить количество его цифр и...

Вывести сумму цифр числа
Дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа.

Вывести сумму и произведение цифр числа
Вводится строка, изображающая целое число. Длина строки может быть разной. Вывести сумму и...

20
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.11.2011, 16:42 2
а к чему тут стринг то?
0
0 / 0 / 1
Регистрация: 17.11.2011
Сообщений: 20
17.11.2011, 17:00  [ТС] 3
такое задание

Добавлено через 12 минут
так что с задачей?
0
Заблокирован
17.11.2011, 18:12 4
im_Kudrik, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
#include <clocale>
using namespace std;
 
int main(void)
{
    setlocale(LC_ALL,"Russian");
    char chom[]="";
    string chomp="";
    cout<<"Ââåäèòå ÷èñëî: ";cin>>chom;
    int *mass=new int[strlen(chom)];
    int len=strlen(chom);
    for(int i=0;i<=len-1;i++)
    {
            chomp=chomp+chom[i]+'k';
            }
    int sum=0;
    cout<<endl;
    for(int i=0;i<=strlen(chom)*2-1;i+=2)
    {
            mass[i]=atoi(&chomp[i]);
            cout<<mass[i]<<"  "; 
            sum+=mass[i]; 
            }
            cout<<endl;
            cout<<endl;
            cout<<"Ñóììà âñåõ ÷èñåë = "<<sum<<endl;
            cout<<endl;
            cout<<endl;
        system ("pause");
}
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.11.2011, 18:17 5
Цитата Сообщение от mc.Duck Посмотреть сообщение
C++
1
2
    char chom[]="";
    cin>>chom;
Ну вы и весельчак Сами хоть тестировали свою программу?
0
Заблокирован
17.11.2011, 18:31 6
Thinker, да..а что?)))
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.11.2011, 18:36 7
Цитата Сообщение от mc.Duck Посмотреть сообщение
Thinker, да..а что?)))
как вы умудряетесь вводить что-то в пустую строку, вернее, в одноэлементный массив?
0
0 / 0 / 1
Регистрация: 17.11.2011
Сообщений: 20
17.11.2011, 18:40  [ТС] 8
и в правду ,вывело не то что надо.но все равно спасибо за помощь =)
0
Заблокирован
17.11.2011, 18:43 9
Thinker, вообще-то chom[] тоже самое, что и *сhom .
Это абсолютно одинаковое объявление динамического массива.

Добавлено через 1 минуту
im_Kudrik, да, вохможно я намудрил. Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string>
#include <clocale>
using namespace std;
 
int main(void)
{
    setlocale(LC_ALL,"Russian");
    char chom[99];
    string chomp="";
    cout<<"Ââåäèòå ÷èñëî: ";cin>>chom;
    int *mass=new int[strlen(chom)];
    int len=strlen(chom);
    for(int i=0;i<=len-1;i++)
    {
            chomp=chomp+chom[i]+'k';
            }
    int sum=0;
    cout<<endl;
    for(int i=0;i<=strlen(chom)*2-1;i+=2)
    {
            mass[i]=atoi(&chomp[i]);
            cout<<mass[i]<<"  "; 
            sum+=mass[i]; 
            }
            cout<<endl;
            cout<<endl;
            cout<<"Ñóììà âñåõ ÷èñåë = "<<sum<<endl;
            cout<<endl;
            cout<<endl;
        system ("pause");
}
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.11.2011, 18:55 10
Цитата Сообщение от mc.Duck Посмотреть сообщение
Thinker, вообще-то chom[] тоже самое, что и *сhom .
Это абсолютно одинаковое объявление динамического массива.
Что я могу сказать, ужас и только... Одно дело, когда вы функцию так описываете, а другое, когда определяете... Вы путаете массивы и указатели.
Кому то ОЧЕНЬ-ОЧЕНЬ-ОЧЕНЬ нужно книжки почитать.
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.11.2011, 18:59 11
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
#include <sstream>
 
int main() {
    std::string str;
    std::cin >> str;
    std::stringstream ss;
    int cnt = 0;
    int temp;
 
    while (++cnt) {
        temp = (str[0] - '0') + (str[1] - '0');
        if (temp > 9) {
            ss << temp;
            ss >> str;
            ss.clear();
        }
        else
            break;
    }
 
    std::cout << temp << " " << cnt;
    std::cout << std::endl;
    return 0;
}
что-то лучше в голову не пришло)
0
0 / 0 / 1
Регистрация: 17.11.2011
Сообщений: 20
17.11.2011, 19:23  [ТС] 12
хм ,и сново не то!сумму цифр числа я могу вывести ,но задание другое...прочтите именно условие ,а не только заголовок
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.11.2011, 19:29 13
ок да?
Миниатюры
Вывести сумму цифр числа  
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
17.11.2011, 19:32 14
Вариант без string:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int SumDigits(int a)
{
   return a ? a%10 + Sum(a/10) : 0;
}
 
int Sum(int a)
{
    int s = a;
    while (abs(s = SumDigits(s)) >= 10)
       ;
    return s;
}
 
int main()
{
    int a;
    scanf("%d", &a);
    printf("%d\n", Sum(a));
    return 0;
}
0
0 / 0 / 1
Регистрация: 17.11.2011
Сообщений: 20
17.11.2011, 19:34  [ТС] 15
neske ,спасибо большое ,но что если вводить трехзначное число ?или четырехзначное?и можно объяснить вот это
C++
1
2
3
4
5
6
7
while (++cnt) {
            temp = (str[0] - '0') + (str[1] - '0');
            if (temp > 9) {
            ss << temp;
            ss >> str;
            ss.clear();
        }
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.11.2011, 19:38 16
im_Kudrik, ну просто в условии была сказано про двузначное, я так и сделал. если любое, то так -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string>
#include <sstream>
 
int main() {
    std::string str;
    std::cin >> str;
    std::stringstream ss;
    int cnt = 0;
    int temp;
 
    while (++cnt) {
        temp = 0;
        for (int i = 0; i < (int) str.size(); ++i)
            temp += (str[i] - '0');
        if (temp > 9) {
            ss << temp;
            ss >> str;
            ss.clear();
        }
        else
            break;
    }
 
    std::cout << temp << " " << cnt;
    std::cout << std::endl;
    return 0;
}
ss в данном случае это универсальный поток ввода - вывода, мы сначала загружаем в него число temp, а выгружаем уже в строку, тем самым мы конвертировали int в string. А далее, мы его отчищаем, ибо вышеописанная операция может происходить не раз. Ну и собственно пока мы не добрались до брейка, то есть temp > 9, счетчик будет инкрементироваться.
1
0 / 0 / 1
Регистрация: 17.11.2011
Сообщений: 20
17.11.2011, 19:48  [ТС] 17
можно еще попросить помочь?просто мы тока начали изучать язык с++ ,можно использовать тока #include <string> без #include <sstream> ?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.11.2011, 21:03 18
ну такой велосипед получился

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string>
 
int main() {
    std::string str;
    std::cin >> str;
    int cnt = 0;
    int temp = 0;
 
    while (++cnt) {
        for (int i = 0; i < (int) str.size(); ++i)
            temp += (str[i] - '0');
        if (temp > 9) {
            str.clear();
            while (temp) {
                char ch = (temp % 10) + '0';
                str = ch + str;
                temp /= 10;
            }
        }
        else
            break;
    }
 
    std::cout << temp << " " << cnt;
    std::cout << std::endl;
    return 0;
}
0
0 / 0 / 1
Регистрация: 17.11.2011
Сообщений: 20
17.11.2011, 21:11  [ТС] 19
а что значит temp > 9 ?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
17.11.2011, 21:15 20
ну, ээ, если temp больше девяти, то продолжаем, а иначе выходим из цикла.
0
17.11.2011, 21:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2011, 21:15
Помогаю со студенческими работами здесь

Вывести на экран сумму цифр данного числа
1.Вводятся двузначное чиcло. Вывести на экран сумму цифр данного числа.

Вывести сумму цифр каждого из делителей числа
добрый день! программа должна выводить сначала все делители числа n, затем для каждого из делителей...

Вывести первую цифру и сумму цифр натурального числа
Задано натуральные числа от 10 до N. Для натурального числа найти первую цифру и сумму его цифр....

Найти сумму делитей. Подсчитать сумму цифр числа. Количество цифр
Друзья,подскажите пожалуйста где ошибка?Цикл не считает сумму делителей числа. #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru