Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
#1

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

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

Один вопрос как?
У меня есть несколько int чисел и из них мне надо сделать одно.
Например так: есть числа 1 8 9 7 и их надо превратить в 1897
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2012, 22:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Составление одного числа из нескольких (C++):

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

Присваивание переменной одного значения из нескольких заданных - C++
Здравствуйте, у меня возник вопрос. Припустим есть цифры 12, 21, 68 и 0. Как присвоить переменной одно из этих значений(рандомно)? Подумал,...

Очень большие числа: узнать, есть ли остаток от деления одного числа на другое - C++
Требуется узнать, есть ли остаток от деления одного числа на другое. Оба числа много больше int64, ~1000 символов и больше. Я попытался...

Из одного файла считать целые числа, в другие файлы записать четные и нечетные числа - C++
Нужно с одного файла считать целые числа и в другие файлы записать четные и нечетные числа. Вот код, но почему-то не работает...и как...

Как убрать из одного числа другие маленькие числа? - C++
Задание состоит из двух частей: 1) Убрать из числа 0,2,3,5,7. 2) Убрать все числа, которые делятся на заданный коэффициент. Например...

Линейный однонаправленный список. Описать процедуру добавления одного или нескольких элементов - C++
Читая целые числа из текстового файла, создать линейный односвязный список. Описать процедуру добавления одного или нескольких ...

14
DiffEreD
1431 / 768 / 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 / 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
Catstail
Модератор
22838 / 11204 / 1812
Регистрация: 12.02.2012
Сообщений: 18,444
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
DiffEreD
1431 / 768 / 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 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 12:03  [ТС] #7
спасибо
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
25.07.2012, 12:05 #8
Цитата Сообщение от yuron_477 Посмотреть сообщение
странно что тут не надо коректно переводить char в int
Почему странно? В арифметических выражениях char преобразуется в int.
0
DiffEreD
1431 / 768 / 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;  // нормально
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,054
Записей в блоге: 17
25.07.2012, 12:27 #10
Грубо говоря по тому что char и есть int только меньшего размера
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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;
1
Catstail
Модератор
22838 / 11204 / 1812
Регистрация: 12.02.2012
Сообщений: 18,444
25.07.2012, 12:31 #12
Цитата Сообщение от НубаС++ Посмотреть сообщение
(очень тупое но хотябы решение)
- да уж...

Мое решение работает верно:
0
Миниатюры
Составление одного числа из нескольких  
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,054
Записей в блоге: 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
0
nameless
Эксперт С++
334 / 298 / 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/1ab77478c245fd26bb938c2802cd8fa0
1
НубаС++
1 / 1 / 1
Регистрация: 25.02.2012
Сообщений: 115
25.07.2012, 22:51  [ТС] #15
Цитата Сообщение от Catstail Посмотреть сообщение
Мое решение работает верно:
Я не спорю оно работает.
Кстати извините когда я писал (очень тупое но хотябы решение) я имел ввиду что так у меня получилось
я бы воспользовался и вашим но у меня почему что не получилось вашим способом
Еще раз извиняюсь если я не так выразился
0
25.07.2012, 22:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2012, 22:51
Привет! Вот еще темы с ответами:

Генерация одного числа на основе другого - C++
Друзья, добрый день. Помогите решить ребус, сам не могу ума дать. Гуру подскажите реально или нет вообще. Задача: Есть числа, по 8...

Числа из одного файла переписать в другой - C++
Прошу написать прогу, чтобы читала из одного txt файла число и писала его в другой. Желательно стандартными функциями С++. Я сам пытался,...

Преобразовать числа из одного диапазона в другой - C++
Нужна функция перевода числа a из -N - N границы в число b из границы 0-6. Например число 50 из границы 0-100 перевести в число x из...

Переписать уникальные числа одного массива в другой - C++
Дан массив С ( двухмерный массив ) с размером, который задаёт пользователь. Написать программу которая в новый массив А записывает те...


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

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

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