Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
bur_03
0 / 0 / 1
Регистрация: 18.12.2016
Сообщений: 6
#1

Прибавить к первой цифре числа 2 и вывести получившиеся число - C++

29.12.2016, 16:10. Просмотров 561. Ответов 20
Метки нет (Все метки)

Для двухзначных чисел всё ОК, о как введёшь однозначное или больше чем двухзначное, начинается белеберда.
Ввожу 92 выдаёт 112, ввожу 3 выдаёт 23, ввожу 321 выдаёт 519. В чё тут пробелема


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
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    int N,b,S,i,a,p;
    cin>>N;
    i=0;
    a=N;
    do{a=a/10;
        i=i+1;
      }
    while(a>10);
    cout<<a<<" ";
        a=a+2;
         p=(pow(10,i));
        a=a*p;
        b=N%p;
        S=a+b;
        cout<<N<<" "<<i<<" "<<a<<" "<<p<<" "<<b<<" "<<S;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2016, 16:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Прибавить к первой цифре числа 2 и вывести получившиеся число (C++):

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

Написать программу, которая к первой цифре натурального числа N, добавляет 2
Нужно написать программу, которая к первой цифре натурального числа N,...

Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой...

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

Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае не изменять его. Вывести полученное число
Дано целое число. Если оно является положительным, то прибавить к нему 1; в...

Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой...

20
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
29.12.2016, 16:38 #2
 Комментарий модератора 
bur_03, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.9 (порядок оформления кода).

.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,241
29.12.2016, 16:53 #3
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    int x, y = 2;
    std::cin >> x;
    for (int p = x/10; p; p /= 10)
        y *= 10;
    std::cout << x + y;
}
0
Peoples
1269 / 774 / 730
Регистрация: 06.02.2016
Сообщений: 2,083
Записей в блоге: 15
Завершенные тесты: 4
29.12.2016, 17:29 #4
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
using namespace std;
int main() {
    int x;
    cin>>x;
    int y=to_string(x)[0]-'0'+2;
    cout<<stoi(to_string(y)+to_string(x).substr(1));
    return 0;
}
0
Fixer_84
827 / 637 / 645
Регистрация: 30.04.2016
Сообщений: 2,115
01.01.2017, 18:14 #5
bur_03, здравствуйте. Чтобы не повторяться, я сделал так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    int N, res;
    cout << "Введите число:" << endl;
    cout << "N = ";
    cin >> N;
    res = N / pow(10, to_string(N).length() - 1);
    res += 2;
    cout << "Искомое число: ";
    cout << atoi((to_string(res) + to_string(N).substr(1)).c_str()) << endl;
    system("pause");
    return 0;
}
0
GbaLog-
Любитель чаепитий
3156 / 1462 / 462
Регистрация: 24.08.2014
Сообщений: 5,180
Записей в блоге: 1
Завершенные тесты: 2
01.01.2017, 18:43 #6
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
#include <iostream>
 
void addTwoToBeginInt(int& n)
{
    std::string str{std::to_string(n)};
    if(str[0] >= '8')
    {
        str[0] = '0' - str[0] + 10 + '0';
        str.insert(str.begin(), '1');
    }
    else
        str[0] += 2;
    
    try
    {
        n = std::stoi(str);
    }
    catch(...)
    {
        n = n;
    }
}
 
int main()
{
    int n{};
    std::cout << (std::cin >> n, addTwoToBeginInt(n), n);
}
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
01.01.2017, 19:10 #7
bur_03,
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    unsigned n(821);
    auto&& temp{ to_string(n) };
    cout << temp.replace(0, 1, to_string(temp.front() - '0' + 2)) << endl;
    system("pause");
}
0
GbaLog-
Любитель чаепитий
3156 / 1462 / 462
Регистрация: 24.08.2014
Сообщений: 5,180
Записей в блоге: 1
Завершенные тесты: 2
01.01.2017, 19:26 #8
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
auto&& temp{ to_string(n) };
Тут auto == std::initializer_list<std::string>, а не std::string.
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
01.01.2017, 19:33 #9
Цитата Сообщение от GbaLog- Посмотреть сообщение
Тут auto == std::initializer_list<std::string>, а не std::string.
не согласен
Прибавить к первой цифре числа 2 и вывести получившиеся число
0
GbaLog-
Любитель чаепитий
3156 / 1462 / 462
Регистрация: 24.08.2014
Сообщений: 5,180
Записей в блоге: 1
Завершенные тесты: 2
01.01.2017, 19:44 #10
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
не согласен
Такое только vc++ и кушает.
Мне лень искать это в стандарте, но наверняка это просто мелкософтовская приблуда.
http://rextester.com/EZZ82195 clang
http://rextester.com/JGW42077 gcc
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
02.01.2017, 12:14 #11
Цитата Сообщение от GbaLog- Посмотреть сообщение
Такое только vc++ и кушает.
Мне лень искать это в стандарте, но наверняка это просто мелкософтовская приблуда.
http://rextester.com/EZZ82195 clang
http://rextester.com/JGW42077 gcc
это - проблема этих компиляторов и людей, кто их использует, но ни в коем случае не моя
0
GbaLog-
Любитель чаепитий
3156 / 1462 / 462
Регистрация: 24.08.2014
Сообщений: 5,180
Записей в блоге: 1
Завершенные тесты: 2
02.01.2017, 13:33 #12
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
ни в коем случае не моя
Да вы уже давно всем своим показали, что ваша хата с краю, вы ничего не знаете.
Вообще ничего не знаете, с++ в том числе.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,241
02.01.2017, 15:09 #13
Тут скорее вопрос в том, что auto со списком инициализации лучше не использовать т.к. тип может определиться не тот, что хотелось бы.
Зачем там rvalue ссылка тоже не понятно.
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
02.01.2017, 15:26 #14
Цитата Сообщение от MrGluck Посмотреть сообщение
Зачем там rvalue ссылка тоже не понятно.
если записать
C++
1
auto temp( to_string(n) );
то будет запущен конструктор копирования => будут скопированы все символы
в случае с r. ссылкой этого не произойдет.

Добавлено через 9 минут
Цитата Сообщение от MrGluck Посмотреть сообщение
т.к. тип может определиться не тот
ну выведенный тип мона посмотреть в ide по ходу написания кода, как это было показано на скрине.
Если тип определяется не тот, значит следует использовать круглые скобки вместо фигурных, это не сложно
0
GbaLog-
Любитель чаепитий
3156 / 1462 / 462
Регистрация: 24.08.2014
Сообщений: 5,180
Записей в блоге: 1
Завершенные тесты: 2
02.01.2017, 15:50 #15
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
то будет запущен конструктор копирования
Бред.
http://rextester.com/IHRHL26262
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct EmptyType 
{
    EmptyType(int n) { std::cout << "ctor " << n << "\n"; this->n = n; }
    EmptyType(const EmptyType& t) { std::cout << "copy ctor\n"; n = t.n; }
    EmptyType(EmptyType&& t) { std::cout << "move ctor\n"; n = t.n; }
    EmptyType& operator=(const EmptyType& t) { std::cout << "operator=\n"; n = t.n; return *this; }
    ~EmptyType() { std::cout << "dtor\n"; }
    int n;
};
 
int main()
{
    EmptyType t(EmptyType{1});
    EmptyType&& t2(EmptyType{2});
    std::cout << t.n << "\n" << t2.n << "\n";
}
Добавлено через 4 минуты
http://en.cppreference.com/w/cpp/language/copy_elision
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
02.01.2017, 15:53 #16
GbaLog-, то что вы написали - к теме не относится вобще.
у меня получился следующий вывод:
Код
ctor 1
ctor 2
Hello, world!
и результат этому - оптимизации компилятора

А в теории должно выполняться примерно так:
C++
1
2
EmptyType t(EmptyType{1}); // вызывается EmptyType(int), потом EmptyType(const EmptyType&)
EmptyType&& t2(EmptyType{2});  // вызывается EmptyType(int), потом EmptyType(EmptyType&&)
0
GbaLog-
Любитель чаепитий
3156 / 1462 / 462
Регистрация: 24.08.2014
Сообщений: 5,180
Записей в блоге: 1
Завершенные тесты: 2
02.01.2017, 15:57 #17
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
результат этому - оптимизации компилятора
Цитата Сообщение от 12.8.31
When certain criteria are met, an implementation is allowed to omit the copy/move construction of a class
object, even if the copy/move constructor and/or destructor for the object have side effects. In such cases,
the implementation treats the source and target of the omitted copy/move operation as simply two different
ways of referring to the same object, and the destruction of that object occurs at the later of the times
when the two objects would have been destroyed without the optimization.123 This elision of copy/move
operations, called copy elision, is permitted in the following circumstances (which may be combined to
eliminate multiple copies):
• in a return statement in a function with a class return type, when the expression is the name of a
non-volatile automatic object (other than a function or catch-clause parameter) with the same cvunqualified
type as the function return type, the copy/move operation can be omitted by constructing
the automatic object directly into the function’s return value
• in a throw-expression, when the operand is the name of a non-volatile automatic object (other than a
function or catch-clause parameter) whose scope does not extend beyond the end of the innermost
enclosing try-block (if there is one), the copy/move operation from the operand to the exception
object (15.1) can be omitted by constructing the automatic object directly into the exception object
• when a temporary class object that has not been bound to a reference (12.2) would be copied/moved
to a class object with the same cv-unqualified type, the copy/move operation can be omitted by
constructing the temporary object directly into the target of the omitted copy/move
• when the exception-declaration of an exception handler (Clause 15) declares an object of the same type
(except for cv-qualification) as the exception object (15.1), the copy/move operation can be omitted
by treating the exception-declaration as an alias for the exception object if the meaning of the program
will be unchanged except for the execution of constructors and destructors for the object declared by
the exception-declaration.
Понятие copy elision существует на уровне ядра языка вообще-то.
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
02.01.2017, 16:03 #18
Цитата Сообщение от GbaLog- Посмотреть сообщение
Понятие copy elision существует на уровне ядра языка вообще-то.
Я стандарта не читал, я пишу лишь то, о чем читал, у Липпмана, Праты об этом ничего не написано.
Вы для меня не авторитет => я буду придерживаться собственной точки зрения.
Молиться на стандарт как вы тоже не собираюсь.
Не правым себя не считаю
0
GbaLog-
Любитель чаепитий
3156 / 1462 / 462
Регистрация: 24.08.2014
Сообщений: 5,180
Записей в блоге: 1
Завершенные тесты: 2
02.01.2017, 16:12 #19
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Вы для меня не авторитет => я буду придерживаться собственной точки зрения.
Я и не хочу быть авторитетом. Я просто доношу до вашего сведения информацию о том, что ваши суждения в корне неверны. Причём я буду делать это всегда, когда это будет так, независимо от того, хотите вы этого или нет, вы можете смело кидать в игнор, если это вам не нравится, но других дезинформировать я ни в коем случае не дам.
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Молиться на стандарт как вы тоже не собираюсь.
Я не молюсь на стандарт, а придерживаюсь его.
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Не правым себя не считаю
Кто бы сомневался.
1
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
02.01.2017, 16:30 #20
GbaLog-,
Copy elision
In C++ computer programming, copy elision refers to a compiler optimization technique that eliminates unnecessary copying of objects.
и этим все сказано

Добавлено через 4 минуты
Раз это оптимизация, то и как всякую оптимизацию, ее можно опустить.
А если ее опустить то и получится то, о чем я писал, т.е.
C++
1
2
EmptyType t(EmptyType{1}); // вызывается EmptyType(int), потом EmptyType(const EmptyType&)
EmptyType&& t2(EmptyType{2});  // вызывается EmptyType(int), потом EmptyType(EmptyType&&)
0
02.01.2017, 16:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2017, 16:30
Привет! Вот еще темы с решениями:

Целое положительное число m записывается в 16-ой системе счисления и разряды в этой записи переставляются в обратном порядке. Получившиеся число прини
ребят помогите!!!!Препод задал 20 задач по программированию,и во не могу...

Определить, делится ли сумма первых трех цифр четырехзначного числа на число, равное последней цифре
1.Делиться ли сума первых трех цифр на число равное последней цифре 2.Равно ли...

Отсортировать по первой цифре
Прошу пожалуйста исправить сортировку по расчетным счетам по первой цифре,...

Дано трёхзначное число.Найти число полученное при перестановке первой и второй цифр заданного числа.
Дано трёхзначное число.Найти число полученное при перестановке первой и второй...


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

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

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