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

Дано вещественное число в котором все цифры различны - C++

Восстановить пароль Регистрация
 
Михаил121212
0 / 0 / 0
Регистрация: 22.06.2012
Сообщений: 8
25.06.2012, 00:41     Дано вещественное число в котором все цифры различны #1
дано вещественное число в котором все цифры различны.определить порядковый номер его первой максимальной цифры
1)от конца числа
2)от начала числа
помогите ,пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2012, 00:41     Дано вещественное число в котором все цифры различны
Посмотрите здесь:

Удалить из массива все элементы,в записи которых все цифры различны. C++
C++ Удалить из массива все элементы,в записи которых все цифры различны.
Дано вещественное число B>0. Последовательность чисел образуется по правилу: a0=1, ai+1=ai2+1. Распечатать все числа ai такие , что ai<B C++
C++ Дано натуральное число n (n <= 9999). Учитывая все четыре цифры числа, определить, правильно, что оно содержит: все разные цифры
Среди всех четырехзначных цифр определить число тех, у которых все цифры различны C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
25.06.2012, 11:57     Дано вещественное число в котором все цифры различны #2
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
 
#define _size 32
 
int main()
{
    int N = 235412353; int q = 0; 
    printf("N = %d ",N);
    int* digits = new int[_size]; 
    for (int q = 0; N > 0; N/=10)
        digits[q++] = N % 10;
 
    int d = _size-1;
    while (digits[d] < 0) d--;
 
    int max_i = d;
    for (int i = d-1; i >= 0; i--)
        max_i = (digits[i] > digits[max_i]) ? i : max_i;
 
    printf("\'%d\' pos = %d ",digits[max_i],max_i+1);
    
    int max_s = 0;
    for (int s = 0; s <= d; s++)
        max_s = (digits[s] > digits[max_s]) ? s : max_s;
 
    printf("\'%d\' pos = %d\n",digits[max_s],max_s+1);
 
    _getch();
 
    return 0;
}
http://liveworkspace.org/code/d7c4ef...8616932b7108fc
-=ЮрА=-
Заблокирован
Автор FAQ
25.06.2012, 14:50     Дано вещественное число в котором все цифры различны #3
Цитата Сообщение от Михаил121212 Посмотреть сообщение
дано вещественное число в котором все цифры различны.определить порядковый номер его первой максимальной цифры
1)от конца числа
2)от начала числа
помогите ,пожалуйста
Вариант 1, работаем со строковым представлением числа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int main()
{
    //ÏðåäïîëГ*ГЈГ*ГҐГ¬ Г·ГІГ® Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*Г* 1-Г*Гї öèôðГ* Г·ГЁГ±Г«Г*
    int maxPos = 0;
    char str[1024] = {0};
    cout<<"Enter double : ";
    cin.getline(str,1023);
    for(int i = 0; str[i] != '\0'; i++)
    {
        if(isdigit(str[i]))
        if(str[maxPos] < str[i])
            maxPos = i;
    }
    cout<<"Max digit in number : "<<str[maxPos]<<endl;
    cout<<"Index of max digit from the begin : "<<maxPos<<endl;
    cout<<"Index of max digit from the end   : "<<i - maxPos<<endl;
    system("pause");
    return 0;
}
Миниатюры
Дано вещественное число в котором все цифры различны  
-=ЮрА=-
Заблокирован
Автор FAQ
25.06.2012, 17:12     Дано вещественное число в котором все цифры различны #4
Вариант 2, работаем именно с вещественным числом
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
#include <cmath>
#include <iostream>
using namespace std;
 
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ Г¬Г*Г±Г±ГЁГў Г°Г*çðÿäîâ Г·ГЁГ±Г«Г* ipart
//ÂîçâðГ*Г№Г*åìîå Г§Г*Г*Г·ГҐГ*ГЁГҐ - Г¬Г*Г±Г±ГЁГў Г°Г*çðÿäîâ 
//nDigits áóäåò ñîäåðæГ*ГІГј ÷èñëî Г°Г*çðÿäîâ
int * splitIntPartInDigits(int ipart, int &nDigits);
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ Г¬Г*Г±Г±ГЁГў Г°Г*çðÿäîâ Г·ГЁГ±Г«Г* fpart
//fpart - (äðîáГ*Г*Гї)äåñÿòè÷Г*Г*Гї Г·Г*Г±ГІГј ГўГҐГ№ГҐГ±ГІГўГҐГ*Г*îãî Г·ГЁГ±Г«Г*
//ÂîçâðГ*Г№Г*åìîå Г§Г*Г*Г·ГҐГ*ГЁГҐ - Г¬Г*Г±Г±ГЁГў Г°Г*çðÿäîâ 
//nDigits áóäåò ñîäåðæГ*ГІГј ÷èñëî Г°Г*çðÿäîâ
int * splitFractPartInDigits(double fpart, int &nDigits);
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ ГЁГ*äåêñ Г¬Г*Г± ýëåìåГ*ГІГ* Гў Г¬Г*Г±Г±ГЁГўГҐ arr
int getMaxDigInArr(int * arr, int n);
 
int main()
{
    //ÏðåäïîëГ*ГЈГ*ГҐГ¬ Г·ГІГ® Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*Г* 1-Г*Гї öèôðГ* Г·ГЁГ±Г«Г*
    double value;
    double ipart, fpart;
    cout<<"Enter double : ";cin>>value;
    int nIpart = 0;//×èñëî öèôð Гў öåëîé Г·Г*Г±ГІГЁ
    int nFpart = 0;//×èñëî öèôð Гў äðîáГ*îé Г·Г*Г±ГІГЁ
    fpart = modf(value,&ipart);//ГђГ*çáèâГ*ГҐГ¬ ÷èñëî Г*Г* öåëóþ ГЁ äðîáГ*ГіГѕ Г·Г*Г±ГІГЁ
    int * iArr = splitIntPartInDigits  (ipart, nIpart);
    int * fArr = splitFractPartInDigits(fpart, nFpart);
    
    int maxPos = getMaxDigInArr(iArr, nIpart);
    int arrPos = getMaxDigInArr(fArr, nFpart);
    int maxNum = iArr[maxPos];
    if(maxNum < fArr[arrPos])
    {
        maxNum = fArr[arrPos];
        maxPos = nIpart + arrPos;
    }
    cout<<"Max digit in number : "<<maxNum<<endl;
    cout<<"Index of max digit from the begin : "<<maxPos<<endl;
    cout<<"Index of max digit from the end   : "<<nIpart + nFpart - maxPos<<endl;
    system("pause");
    return 0;
}
 
int * splitIntPartInDigits(int ipart, int &nDigits)
{
    int bufer = ipart;
    nDigits = 1;
    //Ïîäñ÷¸ò Г°Г*çðÿäîâ Г·ГЁГ±Г«Г*
    while(0 < (bufer = bufer / 10))
        nDigits++;
    //ÂûäåëåГ*ГЁГҐ ГЇГ*ìÿòè ïîä Г¬Г*Г±Г±ГЁГў Г± Г°Г*çðÿäГ*ìè
    int * iArr = new int[nDigits];
    for(nDigits = 0; 0 < ipart; nDigits++)
    {
        iArr[nDigits] = ipart % 10;
        ipart = ipart / 10;
    }
    return iArr;
}
 
int * splitFractPartInDigits(double fpart, int &nDigits)
{
    double bufer = fpart;
    double ipart = 0;
    nDigits = 1;
    //Ïîäñ÷¸ò Г°Г*çðÿäîâ ïîñëå Г§Г*ïÿòîé
    while((bufer = modf(bufer*10,&ipart)))
        nDigits= nDigits + 1;
    //ÂûäåëåГ*ГЁГҐ ГЇГ*ìÿòè ïîä Г¬Г*Г±Г±ГЁГў Г± Г°Г*çðÿäГ*ìè
    int * fArr = new int[nDigits];
    bufer = fpart;
    for(nDigits = 0; (bufer = modf(bufer*10,&ipart)); nDigits++)
        fArr[nDigits] = ipart;
    return fArr;
}
 
int getMaxDigInArr(int * arr, int n)
{
    int imax = 0;//ÏîëГ*ГЈГ*ГҐГ¬ Г·ГІГ® 1-Г© ºëåìåГ*ГІ èìååò Г¬Г*ГЄГ± Г§Г*Г*Г·ГҐГ*ГЁГҐ
    for(int i = 1; i < n; i++)
    {
        if(arr[imax] < arr[i])
            imax = i;
    }
    return imax;
}
Миниатюры
Дано вещественное число в котором все цифры различны  
-=ЮрА=-
25.06.2012, 17:17
  #5

Не по теме:

Вариант 2 мне нравится конечно больше, однако он даёт не совсем приемлимые результате в плане позиции числа от конца, дело в том что большее число десятичных разрядов числа после запятой обусловлено машинным представлением самого вещественного числа, поясню
допустим есть 0,5086044
Мы проделываем следующий трюк 5,086044 и затем отбрасываем 5-ку казалось бы отлично всё должно получатсья, рано или поздно число превратиться в ноль, но в машинном представлении 0,5086044 будет скажем 0,50860440000001 (т.е фактически после 10-го 12-го разрядов будет накапливаться погрешность представления числа с плавающей точкой). Надеюсь я доступно изложил этот омент

MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
25.06.2012, 17:29     Дано вещественное число в котором все цифры различны #6
Если интересно с STL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string str;
    std::cin>> str;
    auto max = std::max_element(str.begin(), str.end());
    std::cout<< *max<< " in positioan at "<< std::distance(str.begin(), max) + 1<< " from begin and "
             << std::distance(max, str.end())<< " from the end.";
    return 0;
}
http://liveworkspace.org/code/d9f3fb...45316181150057

Добавлено через 6 минут
-=ЮрА=-, а если загнать в std::istringstream с std::fixed и std::setprecision? Мб это решит проблему.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2012, 21:35     Дано вещественное число в котором все цифры различны
Еще ссылки по теме:

C++ Найти все трехзначные числа, в которых все цифры различны.
C++ Дано натуральное число n. Проверить будут ли все цифры числа разными

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
25.06.2012, 21:35     Дано вещественное число в котором все цифры различны #7
MrGluck, я хотел показать именно безстроковое решение задачи,со строкой вариант1 он ничем не хуже варианта со стрингпотоком.
Yandex
Объявления
25.06.2012, 21:35     Дано вещественное число в котором все цифры различны
Ответ Создать тему
Опции темы

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