reverse = reverse * 10;
reverse = reverse + (n % 10);
n = n/10;
Отпечатано 51
вместо 051
.Обращение с номером, имеющим нуль на последнем месте
Что необходимо изменить в логике, чтобы получить выход как 051
?
reverse = reverse * 10;
reverse = reverse + (n % 10);
n = n/10;
Отпечатано 51
вместо 051
.Обращение с номером, имеющим нуль на последнем месте
Что необходимо изменить в логике, чтобы получить выход как 051
?
Я думаю, что вы ищете что-то вроде этого:
#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;
}
ну, я не думаю, что вы понимаете, что говорит op. – HuStmpHrrr
Использование
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;
}
Предложите 'do {printf ("% d \ n ", num% 10); Num/= 10; } while (num) 'поэтому, когда' num == 0', что-то печатается. – chux
Обратите внимание, что «051 не является десятичным числом. Это восьмеричное число» - это не проблема *; простой контрпример - 80. Проблема в том, что OP ожидает, что ведущие нули сохраняются в * любой * числовой переменной. – usr2564301
Если вы хотите сохранить 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()
переворачивает строку.
Нет человека ... , но, к сожалению, это почти то же самое :( –
На самом деле мой предыдущий пример имеет тот же номер ... То почему я использовал его –
okay я меняю его –
Эта функция обратной связи отслеживает размер номера через 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;
}
Это может быть другой путь:
#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;
}
Подсказка: Рассмотрим реализацию же с помощью 'char' массива. –
If (number% 10 == 0) reverse (number) –
Невозможно отменить 'int' таким образом. Вам нужно изменить строку символов. –