2014-09-06 16 views
2

Я пытаюсь написать программу, чтобы избавиться от первой и последней цифры числа. Для последней цифры погружение int на 10 разрешает эту проблему. Мне нужно найти способ использовать% для удаления первой цифры, но похоже, что моя логика где-то выключена, моя программа работает, но она работает неправильно. Видите ошибки в логике?C++ Удалить первые и последние цифры числа

#include <iostream> 
using namespace std; 

int main() { 
    int x; 
    int y; 
    cout << "Enter a number to have the first and last didgets removed" << endl; 
    cin >> x; 

    x /= 10; 
    y = x; 
    int count = 0; 

    while (y > 1) 
    { 
     y /= 10; 
     count++; 
    } 

    int newNum = x %(10^(count)); 

    cout << newNum << endl; 
    cin.ignore(); 
    cin.get(); 

    return 0; 
} 

ответ

2

Есть несколько вопросов, но ключ один, пожалуй, это:

int newNum = x %(10^(count)); 

^ является побитовое xor, это не оператор питания.

Вместо этого, вы можете попробовать что-то вроде этого:

int newNum; 
if (y < 10) 
    newNum = 0; // or what should it be? 
else 
{ 
    int denominator = 1; 
    while (y >= 10) 
    { 
     y /= 10; 
     denominator *= 10; 
    } 
    newNum = x % denominator; 
} 

P.S. Есть более короткие и быстрые алгоритмы, но я попытался сохранить логику данного.

+0

спасибо, я получил его. Единственным кодом, который мне пришлось изменить, был int newNum = pow (10, count); \t \t x% = newNum; \t \t cout << x << endl; Спасибо за помощь. –

+0

@ XerradAnon Я бы не пошел на 'pow'. Что, если из-за округления вы получите '9999.99 ...' вместо '10000'. Даже если это не происходит на практике, подход является сомнительным и рискованным. – AlexD

+0

@ XerradAnon Также 'while (y> 1)' выглядит неправильно. Попробуйте протестировать цифры, начинающиеся с '1' и с другими цифрами. – AlexD

2

Другое подобное решение целочисленной арифметики:

#include <iostream> 
using namespace std; 

int main() { 
    int x; 
    int y; 
    cout << "Enter a number to have the first and last didgets removed" << endl; 
    cin >> x; 

    x /= 10; 
    y = x; 
    int count = 0; 

    while (y > 9) { 
     y /= 10; 
     ++count; 
    } 
    for (int i = 0; i < count; i++) 
     y *= 10; 
    x -= y; 

    cout << x << endl; 
    cin.ignore(); 
    cin.get(); 

    return 0; 
} 
+0

Спасибо за использование моего кода и исправление того, что нужно сделать, это значительно облегчило понимание логики, так как большая часть из них - это то, что я сделал, я могу следить за тем, что вы исправили с ним легко. –

+0

@ XerradAnon Добро пожаловать. – JosEduSol

Смежные вопросы