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

Посчитать сумму цифр double

02.03.2012, 00:16. Показов 4542. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите. Новичек в Си. Обучаюсь. В голову пришла задача:
Есть число с точкой( типа double), нужно посчитать суму цифр до точки и после. Обе суммы вывести на экран.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2012, 00:16
Ответы с готовыми решениями:

Посчитать сумму цифр и сумму делителей данного целого числа
помогите пожалуйста Составить программу, которая решает следующие задачи, используя только переменные динамической памяти: посчитать...

Найти сумму первых пяти цифр double числа, используя цикл
как найти суму первых пяти цифр double числа используя цикл ,через строчки знаю как но через цикл не могу Добавлено через 25 минут ...

Посчитать сумму цифр в строке
int sumchis(char*s) { int i = 0; int sum; char ch; while (s!='\0') { if(isdigit(s)) { ch = s; ...

13
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.03.2012, 08:49
Переведи число в строку, потом подсчитывай сумму цифр до и после десятичной точки
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.03.2012, 09:12
Цитата Сообщение от bossforU Посмотреть сообщение
Есть число с точкой( типа double), нужно посчитать суму цифр до точки и после
Попробуй решить задачу без компа на листочке. Дано число 1/3. Чему равна сумма цифр после точки?
1
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
02.03.2012, 09:22
Уточни пожалуйста задание. Тебе надо количество цифр посчитать или сумму значений цифр (как в счастливом билетике)?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.03.2012, 09:23
Цитата Сообщение от KokosSPb Посмотреть сообщение
Тебе надо количество цифр посчитать или сумму значений цифр (как в счастливом билетике)?
Цитата Сообщение от bossforU Посмотреть сообщение
нужно посчитать суму цифр до точки и после. Обе суммы вывести на экран
что непонятного?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.03.2012, 09:55
Вот «решение» задачи через разбор строки с помощью простого автомата (число задается с необязательным знаком и дробной частью, без лидирующих и завершающих пробельных символов):
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main(int argc, char* argv[])
{
    int state = 0;
    int integral = 0;
    int fractional = 0;
    int ret = 0;
 
    char* number;
    
    if(argc != 2)
    {
    fprintf(stderr, "Usage: %s FLOATING\n", argv[0]);
    ret = 1;
    goto ex;
    }
 
    number = argv[1];
    
    while(*number != '\0')
    {
    char c = *number++;
        
    switch(state)
    {
    case 0:
        if(isdigit(c))
        {
        integral += c - '0';
        state = 2;
        }
        else if(c == '-' || c == '+')
        state = 1;
        else
        goto noparse;
        
        break;
        
    case 1:
        if(isdigit(c))
        {
        integral += c - '0';
        state = 2;
        }
        else
        goto noparse;
        
        break;
 
    case 2:
        if(isdigit(c))
        integral += c - '0';
        else if(c == '.')
        state = 3;
        else
        goto noparse;
 
        break;
 
    case 3:
    case 4:
        if(isdigit(c))
        {
        fractional += c - '0';
        state = 4;
        }
        else
        goto noparse;
        
        break;
        
    default:
        fprintf(stderr, "Unknown state %d\n", state);
        ret = 1;
        goto ex;
    }
    }
 
    if(state == 2 || state == 4)
    {
    printf("Given a floating-point number %s;"
           " sum of digits in integral part %d;"
           " sum of digits in fractional part %d\n",
           argv[1], integral, fractional);
    goto ex;
    }
    
 noparse:
    fprintf(stderr, "%s: no parse (state = %d)\n", argv[1], state);
    ret = 1;
    
 ex:
    exit(ret);
}
Если нужно, чтобы число обязательно задавалось с дробной частью, то тогда нужно оставить в строке 82 единственное допустимое завершающее состояние 4
0
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
02.03.2012, 10:53
Да, с просони не так прочитал

Ну можно строчкой, а можно циклами:
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
33
34
35
36
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <conio.h>
 
using namespace std;
 
int main(int argc,char** argv)
{   
    double ch,i;
    int x,a,b,c,t;
 
    cout << "Enter the number"<<endl;
    cin >> ch;
 
    a=b=0;
    
    t=(int)ch;
    for(int sch=0;sch<9;sch++){
        i=100000;
        for(int l=0;l<sch;l++) {i=i/10;};
    x=(int)(ch/i);
    c=(x-((int)(ch/(i*10))*10));
    if(x<=t){//левая часть - a
    a=a+c;
    }
    else{//правая часть - b
    b=b+c;
    }
    }
    cout << a<<endl;
    cout << b;
    getch();
 
    return 0;
}
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.03.2012, 11:08
Цитата Сообщение от KokosSPb Посмотреть сообщение
Ну можно строчкой, а можно циклами:
вот ведь незадача:
Code
1
2
3
4
Enter the number
0.999999999
0
27
0
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
02.03.2012, 11:28
потому что ограничено количество символов, мною
C++
1
2
 i=100000;
sch<9
надо больше - увеличь количество нулей в i и на тоже количество ограничение sch, могу - если очень надо, сделать выяснение - необходимого количества знаков, цикл с выяснением моей x и проверкой условия x<=0 и в обратную сторону
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.03.2012, 11:29
KokosSPb, это не решение
Да и вообще, как мне кажется, через переменные с плавающей точкой в общем случае задачу решить не получится. Ну если только не использовать какой-нибудь тип с произвольной точностью, но в С/С++ таких нет
0
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
02.03.2012, 11:33
Цитата Сообщение от Nameless One Посмотреть сообщение
KokosSPb, это не решение
Да и вообще, как мне кажется, через переменные с плавающей точкой в общем случае задачу решить не получится. Ну если только не использовать какой-нибудь тип с произвольной точностью, но в С/С++ таких нет
а по мне - решение
просто я предложил еще вариант, вдруг понадобится
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.03.2012, 11:34
Цитата Сообщение от Nameless One Посмотреть сообщение
Да и вообще, как мне кажется, через переменные с плавающей точкой в общем случае задачу решить не получится.
Точно так же решение при помощи изначального представления числа в виде строки неправильное. Да и задача по своей сути изначально неправильная с точки зрения решения при помощи программы
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.03.2012, 11:45
Цитата Сообщение от Evg Посмотреть сообщение
Точно так же решение при помощи изначального представления числа в виде строки неправильное
почему же? Для строки, которая удовлетворяет регулярному выражению "(-|\+)?\d+(\.\d+)?" (конечная десятичная дробь), мое решение подойдет.
Или ты имел в виду, что не каждое вещественное число можно задать в данном виде? Тогда я с тобой соглашусь.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.03.2012, 11:52
Цитата Сообщение от Nameless One Посмотреть сообщение
Или ты имел в виду, что не каждое вещественное число можно задать в данном виде?
Да.

Потому что постановка задачи в виде "дана строка, представляющая собой вещественное число" не было. А если её поставить, то она принципиально ничем не отличается от "дана строка, задающая e-mail, отделить имя пользователя от адреса сервера"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2012, 11:52
Помогаю со студенческими работами здесь

Рекурсивно посчитать сумму кубов цифр числа
#include &lt;iostream&gt; using namespace std; int funccube (int a){ int cube,sum; cube =a*a*a; sum+=funccube(a%10); a= a / 10; ...

Посчитать сумму всех цифр,входящих в текст
Дан текст.Посчитать сумму всех цифр,входящих в текст. Пример. Если к 12 прибавить 2,то получим 14. Результат.10 Пояснение 1+2+2+1+4=10

Посчитать сумму цифр всех целых чисел 1 до n
[ход решения в gcc

Определить количество цифр в числе и посчитать их сумму
пользователь вводит число, опредилить количество цифр в числе, посчитать их сумму написал следующий код: #include &lt;iostream&gt; ...

Посчитать количество и сумму десятичных цифр введенного числа
что-то не получается. Прошу помощи.Спасибо. #include&lt;iostream&gt; using namespace std; int main() { setlocale(0,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru