Keeper89, задача нехороша принципиально. Цифры хранятся в двоичной системе. Десятичные цифры, там точно не представимы. Например 0.1 в двоичной системе это бесконечная дробь. ну и т.д. Здесь уже много раз об этом говорили.
Цитата(Keeper89 @ 16.12.2012, 16:18 ) | while(x>1e-10) { x*=10; |
здесь есть шанс вообще никогда не завершить цикл
Вашу задачу конечно можно решить, для ограниченного числа. Скажем, для положительных, максимум 9 цифр после запятой, я бы сделал так:
Цитата(Keeper89 @ 16.12.2012, 16:18 ) | cin >> x; cout << "Введите цифру ="; cin >> n; x-=(int)floor(x+0.5); k=0; while(x>1e-10) { x*=10; y=(int)floor(x+0.5); if(y==n) k++; x-=(int)floor(x+0.5); } x -= floor(x); int y = (int) floor (x * 1000000000 +.5); k=0; while (y) { if (y % 10 == n) k++; y /= 10; }
cout << " Заданная цифра входит в дробную часть числа: " << k << " р."; |
Добавлено @ 00:48
Цитата(Keeper89 @ 16.12.2012, 16:18 ) | | #include<iostream.h> |
это еще что за анахронизм? надеюсь не 16-разрядный компилер. если 16-разрядный, то
Цитата(volatile @ 17.12.2012, 00:45 ) | | intlong y = (intlong) floor (x * 1000000000L +.5); |
|