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

Сумма цифр дробной части - C++

Восстановить пароль Регистрация
 
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 20:16     Сумма цифр дробной части #1
Всем привет!

Весь день пытаюсь найти ошибку в своей программе. Задача вот такая: Найдите сумму первых трех цифр дробной части вещественного числа. Например, для числа 23,16809 она равна 15.
Написал следующий код на Си:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
void main (void)
{
  float f;
  long int x, y, z, i;
  char c;
  do
    {      
      clrscr ();
      printf ("Vvedite chislo \n");
      scanf ("%f", &f);
      x = (int (f*10)) % 10;
      y = (int (f*100)) % 10;
      y = (int (f*1000)) % 10;
      i = x+y+z;
      printf ("Summa pervih treh tsifr drobnoy chasti chisla %f ravna %d \n", f, i);
      printf ("Eshe raz? y/n \n");
      scanf ("%c", &c);
    }
  while (c == 'y');
}
Суть в том, что некоторые числа считаются правильно, некоторые неправильно. Понимаю, что задача легкая. Но всё же, если кто видит ошибку, подскажите пожалуйста. Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 20:16     Сумма цифр дробной части
Посмотрите здесь:

C++ Определить, есть ли среди k-первых цифр дробной части вещественного числа цифра 0
C++ Определения, равна сумма цифр целой части вещественного числа сумме такого же количества цифр в дробной части
Классы. Как посчитать количество цифр в дробной части числа C++
C++ Задача найти сумму первых трех цифр дробной части вещественного числа
C++ Определить есть ли в файле число у которого сумма цифр целой и дробной части равны
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2013, 20:27     Сумма цифр дробной части #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int main()
{
    std::string number;
 
    std::cin >> number;
 
    int answer = 0;
 
    for(size_t i = 0; i < number.length(); ++i)
        if(number[i] == ',' || number[i] == '.')
            answer += (number[i+1]-48) + (number[i+2]-48) + (number[i+3]-48);
    
    std::cout << answer << std::endl;
 
    return 0;
}
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 20:42  [ТС]     Сумма цифр дробной части #3
так это полностью рабочий код или только часть? а мой код совсем для решения задачи не подходит?
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2013, 20:56     Сумма цифр дробной части #4
мой код полностью рабочий.

Добавлено через 2 минуты
также можно вот так:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    double number;
    int answer = 0;
 
    std::cin >> number;
 
    for(int i = 10; i <= 1000; i *= 10)
        answer += (int)((number)*(i)) % 10;
 
    std::cout << answer << std::endl;
 
    return 0;
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.03.2013, 21:18     Сумма цифр дробной части #5
Цитата Сообщение от GetVariable Посмотреть сообщение
мой код полностью рабочий.
Весьма спорное утверждение. Первый код свалится на числах, в которых длина дробной части меньше трех символов. Второй некорректно работает на отрицательных числах.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
27.03.2013, 21:30     Сумма цифр дробной части #6
Цитата Сообщение от soon Посмотреть сообщение
Весьма спорное утверждение. Первый код свалится на числах, в которых длина дробной части меньше трех символов. Второй некорректно работает на отрицательных числах.
Насчёт первого кода, в тз было сказано, что эти 3 числа после запятой имеются, если об этом уже было сказано, зачем делать проверки?
soon
27.03.2013, 21:36
  #7

Не по теме:

Цитата Сообщение от GetVariable Посмотреть сообщение
Насчёт первого кода, в тз было сказано, что эти 3 числа после запятой имеются, если об этом уже было сказано, зачем делать проверки?
Я три раза перечитал первое сообщение, но так и не увидел упоминания об этом. Не могли бы вы процитировать ТС, если это вас не затруднит?

GetVariable
27.03.2013, 21:40
  #8

Не по теме:

Цитата Сообщение от Netti Посмотреть сообщение
Найдите сумму первых трех цифр дробной части
если идёт разговор о первых трех цифр дробной части, исходя из здравого смысла и логике задания, можно извлечь тот факт, что эти цифры имеются.

soon
27.03.2013, 21:44
  #9

Не по теме:

GetVariable, вы же не будете спорить, что 1.1 эквивалетно 1.10?

Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 21:50  [ТС]     Сумма цифр дробной части #10
Мне всё абсолютно понятно, хочу напоследок два вопроса задать:

1) Мой код(я автор темы) изначально неверный и непригоден для решения данной задачи?

2) Если да, то больше вопросов нет. Если нет, то не мог бы кто-нибудь указать ошибки?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.03.2013, 22:14     Сумма цифр дробной части #11
Netti, ваш код верен, но у вас есть одна опечатка. Скажем так, переменная z в вашем коде не используется по назначению. Ну и про отрицательные я уже говорил
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 22:50  [ТС]     Сумма цифр дробной части #12
Про переменную z действительно опечатка. Но дело, видимо, в чем то еще, так как даже исправленный вариант не всегда верно работает. К примеру, при введении числа 1.165 выдается сумма 11. HELP
Про отрицательные пока не говорю, но думаю, что достаточно взять абсолютное значение введенного числа.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.03.2013, 23:08     Сумма цифр дробной части #13
В данном случае вы столкнулись с невозможностью представления данных типа float с нужной точностью. Говоря честно, я не слежу за Си, но, насколько я помню, там нет типа double, хотя код с ним успешно компилируется. Я могу посоветовать вам воспользоваться решением на C++, либо воспользоваться типом double, вместо float. Учтите, что считывать его надо через %lf
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
27.03.2013, 23:47  [ТС]     Сумма цифр дробной части #14
Спасибо за помощь, но к сожалению замена типа float на double ничего не изменила. Может, у кого-нибудь есть еще какие-нибудь варианты? Или задача таким образом не решается? Просто в инете читал материал по C, и там было подобное решение для нахождения второй цифры дробной части. Поэтому и делаю таким способом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 01:36     Сумма цифр дробной части
Еще ссылки по теме:

В вещественном числе определить, равны ли суммы цифр целой и дробной части C++
C++ Написать функцию для определения наличия в файле чисел, у которых сумма цифр целой и дробной части равны
Найти вещественные числа, у которых сумма цифр целой и дробной части равны C++

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

Или воспользуйтесь поиском по форуму:
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
28.03.2013, 01:36     Сумма цифр дробной части #15
Если немного с цифрами поиграться, то что то вроде такого можно сочинить:
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
#include <iostream>
#include <cmath>
 
int main() 
{
    const unsigned numOfdigits = 3; //количество цифр после комы
    unsigned result = 0;
    double d_val;
    
    std::cout<<"Enter number: ";
    std::cin>>d_val;
    
    d_val = std::abs(d_val);
    unsigned i_val = d_val;
    d_val -= i_val;
    for (unsigned i = 0; i<numOfdigits; ++i) d_val *= 10;
    
    while (d_val > 0)
    {
        result += static_cast<int>(d_val)%10;
        d_val /= 10;
    }
        
    std::cout<<"result = "<<result<<"\n";
    
    return 0;
}
Yandex
Объявления
28.03.2013, 01:36     Сумма цифр дробной части
Ответ Создать тему
Опции темы

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