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

Наличие введенной цифры в дробной части числа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Floom
0 / 0 / 0
Регистрация: 26.12.2009
Сообщений: 5
26.12.2009, 19:27     Наличие введенной цифры в дробной части числа #1
Доброго времени суток, уважаемые!
Помощь нужна в следующем:
Пользователь вводит число типа double. Далее вводит некую цифру M. Требуется определить, сколько раз введенная цифра встречается в дробной части нашего числа. Вот мой вариант, но он неэффективен, если в числе присутствует нуль:

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
#include <iostream>
#include <math.h>
int main()
{
    double p;
    int m,buffer,i;
    i=0;
    std::cout << "vvedite p" << std::endl;
    std::cin >> p;
    std::cout << "vvedite m" << std::endl;
    std::cin >> m;
 
    while (buffer!=0)
    {
    P-=floor(P);
    P*=10;
    buffer=floor(P);
    if (M==buffer)
    i++;
    P-=buffer;
      }
    std::cout << i;
    
      return 0;
}
В принципе программа-то простенькая, но не могу придумать, как остановить цикл. Я пробовал сначала переводить дробную часть в char, потом посимвольно переводил в массив и там уже проще было работать, но при использовании sprintf мне выдавалась строка только с 8 элементами, то есть если, допустим, число 3.45464748, то при конвертации получалось только 0 0 4 5 4 6 4 7 =\
Направьте на путь истинный =)
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2009, 19:27     Наличие введенной цифры в дробной части числа
Посмотрите здесь:

C++ Выделение дробной части из числа
C++ Определения, равна сумма цифр целой части вещественного числа сумме такого же количества цифр в дробной части
Не получается проверить массив на наличие введенной цифры C++
C++ Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.програма на С++
C++ Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.Програма на С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
 Аватар для Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
26.12.2009, 20:10     Наличие введенной цифры в дробной части числа #2
могу посоветовать ввести ограничение на i.
Floom
0 / 0 / 0
Регистрация: 26.12.2009
Сообщений: 5
26.12.2009, 20:30  [ТС]     Наличие введенной цифры в дробной части числа #3
Цитата Сообщение от Sekt Посмотреть сообщение
могу посоветовать ввести ограничение на i.
Каким образом, не поясните?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.12.2009, 20:35     Наличие введенной цифры в дробной части числа #4
Floom, Со строками не хотите попробовать решить?
Alex_C#
 Аватар для Alex_C#
20 / 20 / 1
Регистрация: 25.12.2009
Сообщений: 86
26.12.2009, 20:39     Наличие введенной цифры в дробной части числа #5
Преобразуй дробную часть в строку и потом при помощи strncmp() сравнивай каждую цифру с твоей и считай, сколько раз совпала
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
26.12.2009, 20:41     Наличие введенной цифры в дробной части числа #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
#include <iostream>
#include <cmath>
using std::cin;
using std::cout;
using std::endl;
 
int main(){
    double num;
    int digit;
    size_t count;
    
    cout << "Enter double value: ";
    cin >> num;
    cout << "Digit to find: ";
    cin >> digit;
    
    count = 0;
    while ( num - floor(num) > 0.0 ) {
        if ( digit == (int)((num - floor(num)) * 10.0) )
            ++count;
        num *= 10.0;
    }
    cout << "Digit " << digit << " meet " << count << " times" << endl;
    
    return 0;
}
Floom
0 / 0 / 0
Регистрация: 26.12.2009
Сообщений: 5
26.12.2009, 21:06  [ТС]     Наличие введенной цифры в дробной части числа #7
Преобразовать при помощи чего? Я пробовал ввести char str[10] и потом sprintf(str, "%d", P), но в str функция записывала только 8 символов, как я написал выше.

Добавлено через 6 минут
easybudda, работает в принципе нормально, но вот опять проблема, если в дробной части будет 0, то уже идет не так. По пути, который я тут выложил, мне посоветовали пойти. Я сначала пробовал переводить в строку, чтобы избежать нулевого элемента, да и здесь тоже советуют строки использовать, но вот какой функцией лучше перевести...

Добавлено через 14 минут
Вот, посмотрите, пожалуйста. Это вариант со строками и массивом. Знаю, неэффективен также из-за того, что памяти много тратится, но пофигу, главное, чтоб работало. Но вот почему-то sprintf берет только 8 символов.
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
#include <iostream.h>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
 
int main()
 
{
    double M,P,buffer;
    int i,dlina;
    int arr[20];
    char str[20];
    i=0;
    cout << "Vvedite chislo P" << endl;
    cin >> P;
    
    cout << "Vvedite cifru M" << endl;
    cin >> M;
    
    buffer=0.0;
    
    P-=floor(P);
    
    sprintf(str, "%f", P);
    
    cout << str << endl;
    cout << endl;
 
    dlina=strlen(str);
    
           for (i=0; i<dlina; i++)
    {
        char temp = str[i];
        arr[i] = atoi(&temp);
    }
 
    for (i=2; i<dlina; i++)
        cout << arr[i] << " ";
        cout << endl;
 
    buffer=0;
 
    for (i=2; i<dlina; i++)
    {
        if (arr[i]==M)
        buffer++;
    }
    cout << "Vvedennaya cifra vstrechaetsa" << " " << buffer << " " << "raz" << endl;
 
  return 0;
}
Alex_C#
 Аватар для Alex_C#
20 / 20 / 1
Регистрация: 25.12.2009
Сообщений: 86
26.12.2009, 21:07     Наличие введенной цифры в дробной части числа #8
Например так можно из double в string перевести. Дальше - дело техники =)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include "string"
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{
    double p =22.5;
    int temp, num = 5;
    temp=p;
    p -= temp;
    std::string str;
    str = fcvt(p, num, &num, &num);
    std::cout << str;
    std::cin.ignore();  
    return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.12.2009, 21:09     Наличие введенной цифры в дробной части числа #9
Floom, А зачем переводить. Сразу считывайте, например, в переменную типа char p[10] первое значение. А второе считывать в переменную типа char m
Floom
0 / 0 / 0
Регистрация: 26.12.2009
Сообщений: 5
26.12.2009, 21:24  [ТС]     Наличие введенной цифры в дробной части числа #10
Огромное спасибо отписавшимся, буду пробовать.
Alex_C#
 Аватар для Alex_C#
20 / 20 / 1
Регистрация: 25.12.2009
Сообщений: 86
26.12.2009, 21:26     Наличие введенной цифры в дробной части числа #11
Если не получится, как вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include "string"
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{
    int count=0, temp, num = 10;
    char M;
    double p;
    std::cin>>p >> M;
    temp=p;
    p -= temp;
    std::string str;
    str = fcvt(p, num, &num, &num);
    num=10;
    for(int i=0; i<num; i++)
    {
        if (M == str[i])count++;
    }
    std::cout << count;
    return 0;
}
P.S. num - количество знаков после запятой
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
26.12.2009, 21:26     Наличие введенной цифры в дробной части числа #12
Цитата Сообщение от Floom Посмотреть сообщение
easybudda, работает в принципе нормально, но вот опять проблема, если в дробной части будет 0, то уже идет не так.
В каком смысле?
Наличие введенной цифры в дробной части числа
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
26.12.2009, 21:28     Наличие введенной цифры в дробной части числа #13
valeriikozlov, полностью с тобой согласен, ведь указан только тип данных, которые нужно обработать и не указуется как именно обрабатывать, а ведь проще всего - строками..
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.12.2009, 21:31     Наличие введенной цифры в дробной части числа #14
Floom, Кстати проверил код easybudda не нашел там недочетов в работе. Все работает правильно.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
26.12.2009, 21:40     Наличие введенной цифры в дробной части числа #15
Floom, На С и не заморачиваясь проверками вот так бы могло выглядеть
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 <string.h>
 
int main(void){
    char buf[BUFSIZ], c, *p;
    size_t count = 0;
    
    printf("Number: ");
    fgets(buf, sizeof(buf), stdin);
    printf("Digit: ");
    scanf("%c", &c);
    
    if ( ( p = strchr(buf, '.') ) == NULL ){
        printf("Wrong number!\n");
        return 1;
    }
    while ( p = strchr(++p, c) )
        ++count;
    printf("Meet %d times\n", count);
    
    return 0;
}
На С++ по той же логике, только вместо char buf[BUFSIZ] и *p - std::string и std::string::iterator...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2009, 21:46     Наличие введенной цифры в дробной части числа
Еще ссылки по теме:

C++ Классы. Вывести значение числа цифр в дробной части числа
C++ Вывести старшую цифру дробной части и младшую цифру целой части числа
C++ Преобразование целочисленного представления дробной части числа в действительное число

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

Или воспользуйтесь поиском по форуму:
Floom
0 / 0 / 0
Регистрация: 26.12.2009
Сообщений: 5
26.12.2009, 21:46  [ТС]     Наличие введенной цифры в дробной части числа #16
easybudda, Прошу прощения, конечно, всё работает правильно.
Сделаю два варианта.
Всё, спасибо еще раз всем огромное за помощь!
Вопрос исчерпан.
Yandex
Объявления
26.12.2009, 21:46     Наличие введенной цифры в дробной части числа
Ответ Создать тему
Опции темы

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