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

Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа. - C++

Восстановить пароль Регистрация
 
Рома123
3 / 3 / 0
Регистрация: 18.05.2010
Сообщений: 140
24.09.2010, 22:59     Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа. #1
Буду очень благодарен=((

1. Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа.
а) использовать константы границ типов, определенные в файле limits.h
б) не использовать константы границ типов.
2. Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2010, 22:59     Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа.
Посмотрите здесь:

Дано целое число K. Найти сумму его цифр C++
Дано целое число N (> 0). Найти сумму N2 + (N + 1)2+ (N + 2)2+ … + (2*N)2 (целое число) C++
Найти наибольшее положительное целое число n, для которого выполняется условие: C++
5. Дано целое число K. Найти сумму цифр числа К C++
C++ Дано целое число N. Получить число M, у которого порядок цифр обратный по отношению к N
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
24.09.2010, 23:49     Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа. #2
Попробуй что-нибудь такое:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <limits.h>
#include <conio.h>
 using namespace std;
int main() {
  int n;
  cin >> n;
if(n < SHRT_MAX && n > SHRT_MIN)
{
n = (short)n; // приводим к типу short
cout << n << " is short." << endl;
}
 
if(n > SHRT_MAX && n < USHRT_MAX)
{
    n = (unsigned short) n; // приводим к unsigned short
    cout << n << " is unsigned short." << endl;
}
 
  _getch();
}
...... и далее по таблице http://www.cplusplus.com/reference/clibrary/climits/

Или вообще не рубишь и хочешь чтоб все за тебя сделали?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.09.2010, 23:53     Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа. #3
NikolaWhite, Тогда уж лучше начинать с __int64
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.09.2010, 01:45     Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа. #4
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Тогда уж лучше начинать с __int64
Этим как-раз лучше заканчивать, раз уж самый меньший тип ищется...
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
#include <stdio.h>
#include <stdint.h>
#include <limits.h>
 
int main(void){
    union {
        uint64_t    tnUint64;
        int64_t        tnInt64;
        uint32_t    tnUint32;
        int32_t        tnInt32;
        uint16_t    tnUint16;
        int16_t        tnInt16;
        uint8_t        tnUint8;
        int8_t        tnInt8;
    } un;
    
    printf("Number: ");
    if ( scanf("%llu", &un.tnUint64) != 1 ){
        fprintf(stderr, "Input error!\n");
        return 1;
    }
 
    if ( un.tnInt8 == un.tnUint64 )
        printf("int8_t will be enough.\n");
    else if ( un.tnUint8 == un.tnUint64 )
        printf("uint8_t will be enough.\n");
    else if ( un.tnInt16 == un.tnUint64 )
        printf("int16_t will be enough.\n");
    else if ( un.tnUint16 == un.tnUint64 )
        printf("uint16_t will be enough.\n");
    else if ( un.tnInt32 == un.tnUint64 )
        printf("int32_t will be enough.\n");
    else if ( un.tnUint32 == un.tnUint64 )
        printf("uint32_t will be enough.\n");
    else if ( un.tnInt64 == (int64_t)un.tnUint64 )
        printf("int64_t will be enough.\n");
    else 
        printf("uint64_t will be enough.\n");
    
    return 0;
}
работает не корректно, если число в int64_t не помещается
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.09.2010, 02:19     Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа. #5
easybudda,
Сообщение от valeriikozlov
Тогда уж лучше начинать с __int64
Этим как-раз лучше заканчивать, раз уж самый меньший тип ищется...
а сам считываешь с самого начала в 64 тип в своем коде.
PS. именно это я и имел ввиду когда писал NikolaWhite. А как потом искать это дело принципа. Быстрее всего сравнивать с серединой, но меньше кода, когда или с большого в сторону меньшего, или с меньшего в сторону большого сравниваешь, здесь по времени одинаково.
Yandex
Объявления
25.09.2010, 02:19     Дано целое число. Найти «маленький» тип, которого достаточно для сохранения числа.
Ответ Создать тему
Опции темы

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