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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2009, 14:58   #1
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию разделить цифры у числа

До запятой получаетца а после незнаю как цыкл зделать!
Код:
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;

int main ()
{
	int b[10], g=0; 
	int a[10],n=0;
	double k = 2342.7565;
	int f = k-(k-(int)k);
	double w = k-f;
	while(f>0)
	{
		a[n++]=f%10;
		f/=10;
	}
for(int i=n-1; i>=0; i--)
cout<<a[i]<<endl;
/*int t;  
w=w*10;      как вот ето в цыкле зделать???
t=w; 
b[0]=t%10;
*/
getch();
return 0;
}
Cpluser вне форума Ответить с цитированием
Старый 30.09.2009, 15:15   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Например так:
Код:
	n = 0;
	do
	{
		b[n] = w *= 10;
		w -= b[n++];
	}
	while(w != 0 && n < 10);
Только заветные "7565" не получишь так, ввиду особенностей чисел с плавающей запятой
pu4koff вне форума Ответить с цитированием
Старый 30.09.2009, 15:22   #3
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Так выводит много лишнего!
Код:
int t=0;
while(w>0)
{
	w=w*10;
	t=w;
	b[g++]=t%10;
	if((t%10)<0)
		break;
}
Но с выводом проблема!

Последний раз редактировалось Cpluser; 30.09.2009 в 15:37.
Cpluser вне форума Ответить с цитированием
Старый 30.09.2009, 15:35   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение
Так выводит много лишнего!
Не лишнего, а просто все эти умножения вводят лишние погрешности, из-за которых вместо 7565 получается 75649999...
pu4koff вне форума Ответить с цитированием
Старый 30.09.2009, 22:23   #5
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

А как зделать чтоб дальше не выводило?!
Cpluser вне форума Ответить с цитированием
Старый 30.09.2009, 22:46   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение
А как зделать чтоб дальше не выводило?!
Самый простой вариант - перевести в строку и там по точке/запятой ориентироваться где целая часть, а где вещественная. Погрешности по крайней мере это не прибавит.
pu4koff вне форума Ответить с цитированием
Старый 30.09.2009, 23:45   #7
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Зделал!
Код:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
	int a[20];
	string k;
	cin>>k;
	int i=0,t=0;
	while(k[i]!='.')
	{
		t++; i++;
	}
	cout<<t<<" "<<k.length()<<endl;
	for(int y=k.length()-1; y>=t+1; y--)
	{
		a[y]=(int)(k[y]-'0');
		cout<<a[y]<<" ";
	}
system("pause");
}
Cpluser вне форума Ответить с цитированием
Старый 01.10.2009, 01:15   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
Хорошо

зачот камрад
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.10.2009, 14:54   #9
KHEXT
 
Регистрация: 30.09.2009
Сообщений: 6
По умолчанию

Привет!
А чем такое решение не устраивает?

Код:
const DOUBLE fDouble = 1234.5678901;
const DOUBLE fIntegralPart = floor(fDouble);
const ULONG nIntegralPart = (ULONG)fIntegralPart;
static const LONG g_nPrecision = 1000000000;
ULONG nFloatingPart = (fDouble - fIntegralPart) * g_nPrecision;
while (nFloatingPart % 10 == 0)
	nFloatingPart /= 10;
KHEXT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разделить введённое n значное число на отдельны цифры? mig-29 Общие вопросы C/C++ 5 22.05.2009 16:30
Умножить и разделить числа Pavelok Общие вопросы Delphi 5 19.05.2009 21:04
a=42339, как все цифры этого числа разделить пробелами??? MjRed Помощь студентам 6 19.12.2008 11:09
Как разделить введённое n значное число на отдельны цифры? mig-29 Помощь студентам 13 04.04.2008 20:01
Помогите разделить цифры по ячейкам Alex2019 Microsoft Office Excel 8 01.02.2008 07:10