Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2010, 13:56   #1
Kastet14
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 19
По умолчанию реверс целых чисел на Си. подскажите, в чем ошибка.

Добрый день! Пишу реверс для целых чисел в десятичном представлении (в т.ч. с ведущими нулями). Насколько я понимаю данный алгоритм должен работать, но при вводе чисел больше одного разряда выдает ошибку Floating point exeption. Подскажите, пожалуйста, что не так. Спасибо.



Код:
#include "stdio.h"

int main() {
	int a, n, c=0, b, r=0;
	printf("\nInput decimal number: ");
	scanf("%d", &a);
	n=a;
	b=1;
	while (n!=0) {
		b*=10;
		n/=10;
		++c;
	}
	b=b/10;
	printf("\ndivisor=%d, bits=%d\n", b, c);
	n=a;
	printf("\nReverse is ");
	while (c!=0) {
		r=n/b%10;
		b/=100;
		n/=10;
		--c;
		printf("%d", r);
	}
	printf("\n");
	return(0);
}
Kastet14 вне форума Ответить с цитированием
Старый 14.01.2010, 14:21   #2
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

возвращает число, с записанными в обратном порядке цифрами:
Код:
int reverse(int x)
{
	int y = 0;
	while (x != 0)
	{
		y = y * 10 + x % 10;
		x = x / 10;
	}
	return y;
}
на вход 12345 функция вернет 54321.

а если вам нужно просто напечатать число, и еще с нулями спереди, то можно вот так:
Код:
while (x != 0)
{
	printf("%d", x % 10);
	x = x / 10;
}
тогда если x = 1230, то выведится 0321

Последний раз редактировалось Alex_FF; 14.01.2010 в 14:26.
Alex_FF вне форума Ответить с цитированием
Старый 14.01.2010, 15:39   #3
Kastet14
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 19
По умолчанию

[QUOTE=Alex_FF;437615]возвращает число, с записанными в обратном порядке цифрами:
Код:
int reverse(int x)
{
	int y = 0;
	while (x != 0)
	{
		y = y * 10 + x % 10;
		x = x / 10;
	}
	return y;
}
на вход 12345 функция вернет 54321.



да, но если на входе 123450, то вернется тоже 54321 (не 054321), а это уже не реверс. есть ли какое-то решение, чтобы и последний ноль входного числа тоже возвращался?
Kastet14 вне форума Ответить с цитированием
Старый 14.01.2010, 16:33   #4
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Сообщение от Kastet14 Посмотреть сообщение
Цитата:
Сообщение от Alex_FF Посмотреть сообщение
возвращает число, с записанными в обратном порядке цифрами:
Код:
int reverse(int x)
{
	int y = 0;
	while (x != 0)
	{
		y = y * 10 + x % 10;
		x = x / 10;
	}
	return y;
}
на вход 12345 функция вернет 54321.



да, но если на входе 123450, то вернется тоже 54321 (не 054321), а это уже не реверс. есть ли какое-то решение, чтобы и последний ноль входного числа тоже возвращался?
конечно есть, он написан после первого кода
вы его не заметили?
Alex_FF вне форума Ответить с цитированием
Старый 14.01.2010, 16:51   #5
Kastet14
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Alex_FF Посмотреть сообщение
конечно есть, он написан после первого кода
вы его не заметили?
Alex, заметил, но хотелось бы ответ записать в переменную, а не просто напечатать.
Kastet14 вне форума Ответить с цитированием
Старый 14.01.2010, 17:19   #6
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Сообщение от Kastet14 Посмотреть сообщение
Alex, заметил, но хотелось бы ответ записать в переменную, а не просто напечатать.
тогда нужно хранить полученное число как строку. вот пример
Код:
#include <stdio>

char * reverse(int x)
{
	char t[100];
	int i = 0;
	while (x != 0)
	{
		t[i++] = x % 10 + '0';
		x = x / 10;
	}
	t[i] = '\0';
	return t;
}

int main()
{
	int x;
	scanf("%d", &x);
	char *t = reverse(x);
	puts(t);
}

Последний раз редактировалось Alex_FF; 14.01.2010 в 17:21.
Alex_FF вне форума Ответить с цитированием
Старый 14.01.2010, 17:28   #7
Kastet14
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Alex_FF Посмотреть сообщение
тогда нужно хранить полученное число как строку. вот пример
Код:
#include <stdio>

char * reverse(int x)
{
	char t[100];
	int i = 0;
	while (x != 0)
	{
		t[i++] = x % 10 + '0';
		x = x / 10;
	}
	t[i] = '\0';
	return t;
}

int main()
{
	int x;
	scanf("%d", &x);
	char *t = reverse(x);
	puts(t);
}
Alex, спасибо. Как я понял, в цело-численном типе эту задачу решить нельзя.
У меня просьба к вам, посмотрите, плиз эту тему http://programmersforum.ru/showthrea...736#post437736
Kastet14 вне форума Ответить с цитированием
Старый 14.01.2010, 18:08   #8
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

см. http://programmersforum.ru/showthread.php?t=80794
Alex_FF вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, в чем ошибка. V888 Общие вопросы C/C++ 1 19.12.2009 12:44
Пожалуйста, подскажите в чем у меня ошибка? wepoTWR Помощь студентам 8 09.12.2009 22:34
Подскажите в чем ошибка в простой программе baks36 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 13.07.2009 18:08
Подскажите, в чем ошибка? Cannibal Помощь студентам 1 23.11.2008 12:50