Я должен изменить свой номер на последнюю цифру и первую цифру, но без использования функций только с целыми числами или циклами. Например с 12345 до 52341 - PullRequest
2 голосов
/ 09 ноября 2019
#include <iostream>
using namespace std;
int main()
{
// Here I seperate my number because at first I have to seperate and then I have to change the first digit and last digit.
    int numri, shifrat, i = 0, a, shuma = 0, m, d;
    cout << "Jep nje numer \n";
    cin >> numri;
    m = numri;
    while (numri != 0) {
        i++;
        numri = numri / 10;     
    }
    d = pow(10, i - 1);
    numri = m; 
    while (numri != 0) {
        shifrat = numri / d;
        cout << shifrat << "  ";
        numri = numri % d;
        d = d / 10;
    }

//Now after that I have to change the last digit and first digit. Please help me.
//But I'm not allowed to use functions or swap only integers and loops or conditions.

    cin.get();
}

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 4 ]

2 голосов
/ 09 ноября 2019

Это больше о математике, чем что-либо еще.

Чтобы получить последнюю цифру целого числа, мы можем использовать по модулю:

z = abc....xyz % 10

Чтобы «удалить» эту цифру из числа, которое мы используем

abc...xy =  abc...xyz / 10

(где/ обозначает целочисленное деление, то есть 34/10 == 3).

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

Чтобы добавить цифру к целому числу, мы делаем

abc...xyz = (abc...xy * 10) + z

Только теперь у вас есть все необходимое для написания кода:

int main() {
    int inp;
    int outp = 0;
    std::cin >> inp;      // read_input
    while(inp > 0) {      // reverse
         int digit = ...  // get_digit
         inp = ...        // remove_digit
         outp = ...       // add_digit
    }
    std::cout << outp;
}

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

int read_input();
int remove_digit(int x); 
int add_digit(int x,int digit);
int reverse(int x);

int main() {
    int inp = read_input();
    std::cout << reverse(inp);
}
1 голос
/ 09 ноября 2019

Программа может быть написана без использования функции pow.

Вот и вы.

#include <iostream>

int main() 
{
    while ( true )
    {
        std::cout << "Enter a non-negative number (0 - exit): ";

        unsigned int n;

        if ( not ( std::cin >> n ) or n == 0 ) break;

        std::cout << '\n';

        const unsigned int Base = 10;

        unsigned int factor = 1;

        while ( not ( n / factor < Base ) ) factor *= Base;

        unsigned int last_digit = n / factor;
        unsigned int first_digit = n % Base;

        n %= factor;

        n = n - first_digit + last_digit;

        first_digit *= factor;

        n = first_digit + n;

        std::cout << n << "\n\n";
    }

    return 0;
}

Вывод программы может выглядеть как

Enter a non-negative number (0 - exit): 987654321

187654329

Enter a non-negative number (0 - exit): 12345

52341

Enter a non-negative number (0 - exit): 100

1

Enter a non-negative number (0 - exit): 1

1

Enter a non-negative number (0 - exit): 0

Если эти утверждения

if ( not ( std::cin >> n ) or n == 0 ) break;

и

while ( not ( n / factor < Base ) ) factor *= Base;

содержат символы, которые вы еще не знаете, вы можете переписать их как

if ( !( std::cin >> n ) || n == 0 ) break;

и

while ( !( n / factor < Base ) ) factor *= Base;
0 голосов
/ 09 ноября 2019

Вы можете создать программу с 4 переменными - n, данное число, cn - созданное число, u - последняя цифра данного числа и p - число 10 ^ p;Вы сохраните последнюю цифру n и создадите число 10 ^ p в то время как. Затем, используя формулу

   cn = ((u * p + cn % p) /10) * 10 + n;

, вы создадите новый номер;

#include <iostream>
using namespace std;

int main() {

int n, cn, u, p;

cin>>n;

u = n % 10;
cn = n;
p = 1;

while(n>9) {
p = p * 10;
n = n / 10;
}

cn = ((u * p + cn % p) /10) * 10 + n;

cout<<cn;
return 0;
}
0 голосов
/ 09 ноября 2019

Для замены первой и последней цифры в номере ABCDEF -> FBCDEA

num = 12345 res = 52341

идея состоит в том, что:

52341 = 12345 -10005 + 50001

первая цифра fd = число% 10

множитель десятичных знаков df = 1

until num is not zero we do
last digit ld = num
num = num / 10
if num != 0 decimal places multiplier df = df*10

результат = ABCDEF - F - A * 100000 + A + F* 100000

int m = numri;
int ld = 0; // last digit(most)
int fd = numri % 10; // first digit(least)
int df = 1; // last digit multiplier 10^n where n is decimal places
while (numri != 0) {
    ld = numri;// this will be the last digit in last iteration
    numri = numri / 10;
    if(numri) df = df * 10;
}
int res = m - fd - ld * df + fd * df + ld;
cout<<res;

пример:

if the num = 12345

fd = 12345 % 10 =5
df = 1

num = 12345 / 10 = 1234
df = df*10 = 10

num = 1234 / 10 = 123
df = df*10 = 100

num = 123 / 10 = 12
df = df*10 = 1000

fd = num = 12
num = 12 / 10 = 1
df = df*10 = 10000

fd = num = 1
num = 1/10 =0
df not changed
loop exit

result = 12345 - 5  - 1*10000 + 1 + 5*10000 = 62341
...