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

Составление одного числа из нескольких - C++

Восстановить пароль Регистрация
 
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
24.07.2012, 22:39     Составление одного числа из нескольких #1
Один вопрос как?
У меня есть несколько int чисел и из них мне надо сделать одно.
Например так: есть числа 1 8 9 7 и их надо превратить в 1897
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2012, 22:39     Составление одного числа из нескольких
Посмотрите здесь:

C++ Числа из одного файла переписать в другой
Не првильно записываются числа с одного масива в другой C++
Линейный однонаправленный список. Описать процедуру добавления одного или нескольких элементов C++
C++ Из одного файла считать целые числа, в другие файлы записать четные и нечетные числа
Присваивание переменной одного значения из нескольких заданных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.07.2012, 23:25     Составление одного числа из нескольких #2
Вот я бы так сделал:
C++
1
2
3
4
5
6
7
8
int number[] = {1, 8, 9, 7, 9};
int n(0);  //наше число
int j(1);  //множитель
for (int i = 0; i<sizeof number/sizeof (int)-1; i++)
    j*=10;
for (int i = 0; i<sizeof number/sizeof (int); i++, j/=10)
    n += number[i]*j;
cout<<n<<endl;
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 10:49  [ТС]     Составление одного числа из нескольких #3
спасибо. но планы немного изменились и теперь мне надо сделать из char[] int
Новая цель: есть char str_ptr[11] str_ptr[12] str_ptr[13] str_ptr[14] str_ptr[15], они содержат в себе по 1 цифре
И мне каким-нибуть путем нужно из этих 4 char составить 1 int.
Помогите плиз
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,095
25.07.2012, 11:01     Составление одного числа из нескольких #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "iostream.h"
 
int main(int argc, char* argv[])
{
    char C[]={'8','2','3','8'};
    int i,r=0,n=sizeof(C);
 
    for (i=0; i<n; i++)
    {
        r=r*10+(C[i]-'0');
    }
 
    cout << r << endl;
 
    return 0;
}
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 11:48  [ТС]     Составление одного числа из нескольких #5
не получилось. постоянно выводит число 692

Добавлено через 37 минут
Всем спасибо. Нашел такое решение: (очень тупое но хотябы решение)
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
stringstream ss1;
stringstream ss2;
stringstream ss3;
stringstream ss4;
stringstream ss5;
string s1;
string s2;
string s3;
string s4;
string s5;
ss1 << str_ptr[11];
ss1 >> s1;
ss2 << str_ptr[12];
ss2 >> s2;
ss3 << str_ptr[13];
ss3 >> s3;
ss4 << str_ptr[14];
ss4 >> s4;
ss5 << str_ptr[15];
ss5 >> s5;
 
string olelua;
olelua = s1 + s2 + s3 + s4 + s5;
 
int n = atoi(olelua.c_str()); // ÂÎÒ ÎÍÀ ÑÒÐÎÊÀ Ñ ÏÐÅÄÛÄÓÙÈÌ ÏÎÊÀÇÀÍÈÅÌ Ñ×ÅÒ×ÈÊÀ  ÈÍÒÅÅÅÅ
 
cout << n;
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.07.2012, 11:51     Составление одного числа из нескольких #6
Попробовал с массивом char - в Visual Studio 2012 работает без проблем
C++
1
2
3
4
5
6
7
8
char number[] = {7, 8, 9, 7, 9};
int n(0);  //наше число
int j(1);  //множитель
for (int i = 0; i<sizeof number/sizeof (char)-1; i++)
    j*=10;
for (int i = 0; i<sizeof number/sizeof (char); i++, j/=10)
    n += (number[i])*j;  // странно что тут не надо коректно переводить char в int
cout<<n<<endl;
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 12:03  [ТС]     Составление одного числа из нескольких #7
спасибо
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
25.07.2012, 12:05     Составление одного числа из нескольких #8
Цитата Сообщение от yuron_477 Посмотреть сообщение
странно что тут не надо коректно переводить char в int
Почему странно? В арифметических выражениях char преобразуется в int.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.07.2012, 12:15     Составление одного числа из нескольких #9
C++
1
2
3
4
5
char ch = '0';
int n = ch;
cout<<n<<endl;  // выводит 48, а не 0
int x = ch-48;
cout<<x<<endl;  // нормально
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
25.07.2012, 12:27     Составление одного числа из нескольких #10
Грубо говоря по тому что char и есть int только меньшего размера
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
25.07.2012, 12:30     Составление одного числа из нескольких #11
yuron_477, вы массив инициализируете так
C++
1
char number[] = {7, 8, 9, 7, 9};
а не так
C++
1
char number[] = {'7', '8', '9', '7', '9'};
Это то же самое, что в последнем примере сделать так:
C++
1
2
3
char ch = 0;
int n = ch;
cout << n << endl;
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,095
25.07.2012, 12:31     Составление одного числа из нескольких #12
Цитата Сообщение от НубаС++ Посмотреть сообщение
(очень тупое но хотябы решение)
- да уж...

Мое решение работает верно:
Миниатюры
Составление одного числа из нескольких  
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
25.07.2012, 13:20     Составление одного числа из нескольких #13
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 <string>
#include <vector>
#include <stdlib.h>
#include <boost/lexical_cast.hpp>
//---------------------------------------------------------------------------- 
 
//----------------------------------------------------------------------------  
int main()
{
using namespace std;
 
char ch[15]={1};
string str(ch+11,ch+15);
// вариант 1
cout<< atoi( str.c_str() ) <<endl;
// вариант 2    
try
  {
   int i=lexical_cast<int>(string);
   cout<<i<<endl;   
  }
catch(bad_lexical_cast &e)  { cerr<<e.what()<<end;}
 
return 0;
}
//---------------------------------------------------------------------------
блин только не пойму с какими опциями надо компилить в g++ boost/lexical_cast
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
25.07.2012, 13:20     Составление одного числа из нескольких #14
Поигрался немного с boost proto

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
#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
#include <boost/proto/core.hpp>
#include <boost/proto/context.hpp>
 
namespace proto = boost::proto;
using proto::_;
 
template <typename expr>
struct calculator_expression;
 
struct calculator_domain
   : proto::domain <proto::generator <calculator_expression>> { };
 
template <int I> struct placeholder {  };
 
struct calculator_context
   : proto::callable_context <calculator_context const> {
   std::vector <int> v_numbers;
   typedef int result_type;
 
   explicit calculator_context(const std::vector <int> & v_numbers_)
      : v_numbers(v_numbers_) {  }
 
   template <int I>
   int operator ()(proto::tag::terminal, placeholder <I>) const {
      std::string result;
      
      for (auto & val : this->v_numbers) {
         result += std::to_string(val);
      }
    
      return stoi(result);
    }
};
 
template <typename expr>
struct calculator_expression
  : proto::extends <expr, calculator_expression <expr>, calculator_domain>
{
   explicit calculator_expression(expr const & expression = expr())
      : calculator_expression::proto_extends(expression)
   {  }
 
   BOOST_PROTO_EXTENDS_USING_ASSIGN(calculator_expression <expr>)
 
   int operator ()() const {
      calculator_context const ctx;
      return proto::eval(*this, ctx);
   }
 
   int operator ()(const std::vector <int> & v_numbers) const {
      calculator_context const ctx(v_numbers);
      return proto::eval(*this, ctx);
   }
};
 
calculator_expression <proto::terminal <placeholder <1>>::type> const _1;
calculator_expression <proto::terminal <placeholder <2>>::type> const _2;
 
int main() {
   try {
      std::vector <int> v_numbers = { 8, 230, 12, 20, 1 };
      int number = ((_1)(v_numbers));
      std::cout << number << std::endl;
   } catch (const std::out_of_range & exc) {
      std::cerr << exc.what();
   }
   
   return 0;
}
http://liveworkspace.org/code/1ab774...938c2802cd8fa0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2012, 22:51     Составление одного числа из нескольких
Еще ссылки по теме:

Очень большие числа: узнать, есть ли остаток от деления одного числа на другое C++
C++ Прибавление одного и того же числа, пока не получим определенное
Как массив цифр записать в виде одного числа? C++

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

Или воспользуйтесь поиском по форуму:
НубаС++
 Аватар для НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 22:51  [ТС]     Составление одного числа из нескольких #15
Цитата Сообщение от Catstail Посмотреть сообщение
Мое решение работает верно:
Я не спорю оно работает.
Кстати извините когда я писал (очень тупое но хотябы решение) я имел ввиду что так у меня получилось
я бы воспользовался и вашим но у меня почему что не получилось вашим способом
Еще раз извиняюсь если я не так выразился
Yandex
Объявления
25.07.2012, 22:51     Составление одного числа из нескольких
Ответ Создать тему
Опции темы

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