Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
1

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

24.07.2012, 22:39. Просмотров 1454. Ответов 14
Метки нет (Все метки)

Один вопрос как?
У меня есть несколько int чисел и из них мне надо сделать одно.
Например так: есть числа 1 8 9 7 и их надо превратить в 1897
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2012, 22:39
Ответы с готовыми решениями:

Пересчёт нескольких значений с выводом одного числа
Доброго дня, с php познакомился не так давно, поэтому всё ещё не всё понимаю :) Не так давно...

Одномерный массив. составление одного массива из эл.другого.
задание звучит так: Составить массив B из неположительных элементов массива А(15). Вот что у меня...

Составление max числа из цифр произвольного числа
Добрый день гуру паскаля помогите. Нужно создать программу составления максимального числа из...

Составление числа из цифр другого числа
Дано натуральное число, содержащее до 50 разрядов. Составить из этого числа наибольшее число,...

14
1450 / 787 / 257
Регистрация: 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 / 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.
Помогите плиз
0
Модератор
Эксперт Python
26653 / 13900 / 2643
Регистрация: 12.02.2012
Сообщений: 22,783
Записей в блоге: 1
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 / 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;
0
1450 / 787 / 257
Регистрация: 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 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 12:03  [ТС] 7
спасибо
0
511 / 463 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
25.07.2012, 12:05 8
Цитата Сообщение от yuron_477 Посмотреть сообщение
странно что тут не надо коректно переводить char в int
Почему странно? В арифметических выражениях char преобразуется в int.
0
1450 / 787 / 257
Регистрация: 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;  // нормально
0
Эксперт С++
8303 / 6057 / 602
Регистрация: 10.12.2010
Сообщений: 28,148
Записей в блоге: 26
25.07.2012, 12:27 10
Грубо говоря по тому что char и есть int только меньшего размера
0
511 / 463 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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;
1
Модератор
Эксперт Python
26653 / 13900 / 2643
Регистрация: 12.02.2012
Сообщений: 22,783
Записей в блоге: 1
25.07.2012, 12:31 12
Цитата Сообщение от НубаС++ Посмотреть сообщение
(очень тупое но хотябы решение)
- да уж...

Мое решение работает верно:
0
Миниатюры
Составление одного числа из нескольких  
Эксперт С++
8303 / 6057 / 602
Регистрация: 10.12.2010
Сообщений: 28,148
Записей в блоге: 26
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
0
Эксперт С++
340 / 304 / 36
Регистрация: 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/... 2802cd8fa0
1
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 22:51  [ТС] 15
Цитата Сообщение от Catstail Посмотреть сообщение
Мое решение работает верно:
Я не спорю оно работает.
Кстати извините когда я писал (очень тупое но хотябы решение) я имел ввиду что так у меня получилось
я бы воспользовался и вашим но у меня почему что не получилось вашим способом
Еще раз извиняюсь если я не так выразился
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2012, 22:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Составление числа из цифр другого числа
Дано натуральное число, содержащее до 50 разрядов. Составить из этого числа наибольшее число,...

Составление числа из цифр другого числа
можете помочь, ни разу на этом не делали, вот задали... Дано натуральное число, содержащее до 50...

Нахождение количества столбцов матрицы, не содержащих ни одного нулевого элемента, и максимального числа, встречающихся более одного раза.
Ребята очень нужна помощь, срочно надо сдать индивидуалку две задачки не получилось сделать...

Выбор одного из нескольких
Столкнулся с таким моментом. Создаю переменную Test. Хочу что бы выбор значения для этой переменной...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.