Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
bossforU
0 / 0 / 0
Регистрация: 30.11.2010
Сообщений: 22
#1

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

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

Помогите. Новичек в Си. Обучаюсь. В голову пришла задача:
Есть число с точкой( типа double), нужно посчитать суму цифр до точки и после. Обе суммы вывести на экран.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2012, 00:16     Посчитать сумму цифр double
Посмотрите здесь:

C++ Подпрограммы: Из заданного числа отняли сумму его цифр. Из результата опять отняли сумму его цифр и т.д. Через сколько таких действий получится ноль?
C++ Посчитать сумму всех цифр,входящих в текст
C++ Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)"
Посчитать сумму цифр всех целых чисел 1 до n C++
Дана последовательность чисел. Посчитать сумму цифр десятичной записи всех отрицательных чисел C++
C++ Найти сумму делитей. Подсчитать сумму цифр числа. Количество цифр
Посчитать сумму цифр в строке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
02.03.2012, 08:49     Посчитать сумму цифр double #2
Переведи число в строку, потом подсчитывай сумму цифр до и после десятичной точки
Evg
Эксперт CАвтор FAQ
17382 / 5620 / 350
Регистрация: 30.03.2009
Сообщений: 15,398
Записей в блоге: 26
02.03.2012, 09:12     Посчитать сумму цифр double #3
Цитата Сообщение от bossforU Посмотреть сообщение
Есть число с точкой( типа double), нужно посчитать суму цифр до точки и после
Попробуй решить задачу без компа на листочке. Дано число 1/3. Чему равна сумма цифр после точки?
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
02.03.2012, 09:22     Посчитать сумму цифр double #4
Уточни пожалуйста задание. Тебе надо количество цифр посчитать или сумму значений цифр (как в счастливом билетике)?
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
02.03.2012, 09:23     Посчитать сумму цифр double #5
Цитата Сообщение от KokosSPb Посмотреть сообщение
Тебе надо количество цифр посчитать или сумму значений цифр (как в счастливом билетике)?
Цитата Сообщение от bossforU Посмотреть сообщение
нужно посчитать суму цифр до точки и после. Обе суммы вывести на экран
что непонятного?
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
02.03.2012, 09:55     Посчитать сумму цифр double #6
Вот «решение» задачи через разбор строки с помощью простого автомата (число задается с необязательным знаком и дробной частью, без лидирующих и завершающих пробельных символов):
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
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
02.03.2012, 10:53     Посчитать сумму цифр double #7
Да, с просони не так прочитал

Ну можно строчкой, а можно циклами:
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;
}
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
02.03.2012, 11:08     Посчитать сумму цифр double #8
Цитата Сообщение от KokosSPb Посмотреть сообщение
Ну можно строчкой, а можно циклами:
вот ведь незадача:
Код
Enter the number
0.999999999
0
27
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
02.03.2012, 11:28     Посчитать сумму цифр double #9
потому что ограничено количество символов, мною
C++
1
2
 i=100000;
sch<9
надо больше - увеличь количество нулей в i и на тоже количество ограничение sch, могу - если очень надо, сделать выяснение - необходимого количества знаков, цикл с выяснением моей x и проверкой условия x<=0 и в обратную сторону
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
02.03.2012, 11:29     Посчитать сумму цифр double #10
KokosSPb, это не решение
Да и вообще, как мне кажется, через переменные с плавающей точкой в общем случае задачу решить не получится. Ну если только не использовать какой-нибудь тип с произвольной точностью, но в С/С++ таких нет
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
02.03.2012, 11:33     Посчитать сумму цифр double #11
Цитата Сообщение от Nameless One Посмотреть сообщение
KokosSPb, это не решение
Да и вообще, как мне кажется, через переменные с плавающей точкой в общем случае задачу решить не получится. Ну если только не использовать какой-нибудь тип с произвольной точностью, но в С/С++ таких нет
а по мне - решение
просто я предложил еще вариант, вдруг понадобится
Evg
Эксперт CАвтор FAQ
17382 / 5620 / 350
Регистрация: 30.03.2009
Сообщений: 15,398
Записей в блоге: 26
02.03.2012, 11:34     Посчитать сумму цифр double #12
Цитата Сообщение от Nameless One Посмотреть сообщение
Да и вообще, как мне кажется, через переменные с плавающей точкой в общем случае задачу решить не получится.
Точно так же решение при помощи изначального представления числа в виде строки неправильное. Да и задача по своей сути изначально неправильная с точки зрения решения при помощи программы
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
02.03.2012, 11:45     Посчитать сумму цифр double #13
Цитата Сообщение от Evg Посмотреть сообщение
Точно так же решение при помощи изначального представления числа в виде строки неправильное
почему же? Для строки, которая удовлетворяет регулярному выражению "(-|\+)?\d+(\.\d+)?" (конечная десятичная дробь), мое решение подойдет.
Или ты имел в виду, что не каждое вещественное число можно задать в данном виде? Тогда я с тобой соглашусь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2012, 11:52     Посчитать сумму цифр double
Еще ссылки по теме:

Рекурсивно посчитать сумму кубов цифр числа C++
Почему мы пишем double x (double y)? а не через запятую double x,y C++
C++ Определить количество цифр в числе и посчитать их сумму
Посчитать сумму цифр и сумму делителей данного целого числа C++
Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17382 / 5620 / 350
Регистрация: 30.03.2009
Сообщений: 15,398
Записей в блоге: 26
02.03.2012, 11:52     Посчитать сумму цифр double #14
Цитата Сообщение от Nameless One Посмотреть сообщение
Или ты имел в виду, что не каждое вещественное число можно задать в данном виде?
Да.

Потому что постановка задачи в виде "дана строка, представляющая собой вещественное число" не было. А если её поставить, то она принципиально ничем не отличается от "дана строка, задающая e-mail, отделить имя пользователя от адреса сервера"
Yandex
Объявления
02.03.2012, 11:52     Посчитать сумму цифр double
Ответ Создать тему
Опции темы

Текущее время: 07:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru