2014-12-20 2 views
-1
reverse = reverse * 10; 
reverse = reverse + (n % 10); 
n = n/10; 

Отпечатано 51 вместо 051.Обращение с номером, имеющим нуль на последнем месте

Что необходимо изменить в логике, чтобы получить выход как 051?

+0

Подсказка: Рассмотрим реализацию же с помощью 'char' массива. –

+0

If (number% 10 == 0) reverse (number) –

+6

Невозможно отменить 'int' таким образом. Вам нужно изменить строку символов. –

ответ

0

Я думаю, что вы ищете что-то вроде этого:

#include <stdio.h> 

int main() { 

    int number = 150, temp = number, digit; 

    while(temp != 0) { 
     digit = temp%10; 
     temp = temp /10; 
     printf("%d", digit); 
    } 

    return 0; 
} 
+2

ну, я не думаю, что вы понимаете, что говорит op. – HuStmpHrrr

0

Использование

while(num) 
{ 
    printf("%d\n",num%10); 
    num/=10; 
} 

, чтобы реверсировать int переменную с именем num. Или вы можете использовать следующие (предложенный @chux), который будет печатать по крайней мере, 0, когда num 0:

do 
{ 
    printf("%d\n",num%10); 
    num/=10; 
}while(num); 

Это будет печатать zeros.But Я думаю, что вам нужно Реверс номера, сохраненного в переменная. Короче говоря, вы не можете этого сделать, потому что 051 не является десятичным числом. Это восьмеричное число. Просто напечатайте 0, когда цифра (цифры) в единицах единиц равна 0. Следующая программа делает это:

#include <stdio.h> 
#include <stdbool.h> //for using boolean values 

int main(void){ 
int n=150,reverse=0; 
bool ranonce=false; 
while(n) 
{ 
    if(ranonce==false && n%10==0) //if 0 is found when the boolean vaue if false 
    putchar('0');    //print a '0' 
    reverse = reverse * 10; 
    reverse = reverse + (n % 10); 
    n = n/10; 

    if(n%10!=0) //if more zeros are not found in `n` 
    ranonce=true; 
} 
printf("%d\n",reverse); 
return 0; 
} 
+0

Предложите 'do {printf ("% d \ n ", num% 10); Num/= 10; } while (num) 'поэтому, когда' num == 0', что-то печатается. – chux

+0

Обратите внимание, что «051 не является десятичным числом. Это восьмеричное число» - это не проблема *; простой контрпример - 80. Проблема в том, что OP ожидает, что ведущие нули сохраняются в * любой * числовой переменной. – usr2564301

1

Если вы хотите сохранить whole reverse number в one place, просто используйте такой массив:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int n=15000; 
    char reverse[11]; // change the array size depending on integer value type 
    int ind=0; 
    while(n) 
    { 
     int digit = n%10; 
     reverse[ind++] = digit + '0'; 
     n = n/10; 
    } 
    reverse[ind]='\0'; 
    printf("%s\n",reverse); 

    // If you want the decimal value you can simply do this 
    int decimal_val=atoi(reverse); 
    printf("%d\n",decimal_val); 
    return 0; 
} 

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

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 
{ 
    int n = 3505000; 
    char rev[15]; 
    itoa(n,rev,10); 
    strrev(rev); 
    puts(rev); 
} 

Здесь itoa(number, target_string, number_base) // Здесь n является десятичным числом, так base=10
и strrev() переворачивает строку.

+0

Нет человека ... , но, к сожалению, это почти то же самое :( –

+1

На самом деле мой предыдущий пример имеет тот же номер ... То почему я использовал его –

+0

okay я меняю его –

0

Эта функция обратной связи отслеживает размер номера через out-param, psz.

Итак, для вашего тестового входа 510 возвращаемое значение составляет 15, с *psz = 3, что позволяет легко распечатать 015.

int reverse(int input, int* psz) 
{ 
    int output = 0; 

    *psz = 0; 
    while(input) 
    { 
     output *= 10; 
     output += (input % 10); 
     input /= 10; 
     (*psz)++; 
    } 

    return output; 
} 

int main() 
{ 
    int input = 510; 
    int sz; 

    int out=reverse(input, &sz); 

    printf("%0*d\n", sz, out); // Output: 015 

    return 0; 
} 
0

Это может быть другой путь:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    int n=15000; 
    char reverse[15]; 
    itoa(n,reverse,10); // Here 10 is the base. Means decimal number 
    strrev(reverse); 
    printf("%s\n",reverse); 
    return 0; 
} 
Смежные вопросы