Другие языки программирования и технологии

аааа сессия горит!!! помогите написать на си(не с++): перевод числа в двоичную систему

наверно что-то вроде:
int main() {
int a;
int n;
int c = 0;
int b[n];
/* ввод числа и количества знаков в числе */
fscanf(stdin, "%d %d", &a, &n);
for(i = 0; i < n; i++) {
b = a%2;
a = a/2;
}
for(i = 0; i < n; i++) {
c = c*10 + b[n - i];
}
fprintf(stdout, "%d\n", c);
return 0;
}
только для целых.. . и к тому же надо, наверняка, устранить это мою фигню с n...
ОБ
Олег Богданов
479
Лучший ответ
int X;

char buf[sizeof(int) * 8 + 1];
memset(buf, 0, sizeof(buf));
char *p = &buf[sizeof(buf) - 1];
do
{
*--p = (X % 2) ? '1' : '0';
} while (X /=2);

printf("%s\n", p);
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;

class Binary
{
int dec;
string bin;
public:
Binary() : dec(0)
{ }
Binary(int n) : dec(n)
{ }
void dec2bin() {
for(int n = dec; n != 0; n >>= 1)
bin += (n & 1) ? "1" : "0";
}
void display() {
string::reverse_iterator rit;
for(rit = bin.rbegin(); rit < bin.rend(); rit++)
cout << *rit;
}
};

int main()
{
int p;

cout << "vvedi chislo: ";
cin >> p;

Binary bcls(p);

bcls.dec2bin();
bcls.display();
cout << endl;
return 0;
}
Си пока не изучал, но читать его могу, "устранить фигню с n" можно простым while циклом, в нем должно быть a<>0(дело в том что a=a/2 это целочисленное деление и на последнем шаге а становится нулем) , затем в строке b = a%2; должно быть b[k]=a%2; и естественно в тело цикла нужно поместить k++
Ну и напоследок вместо for(i = 0; i < n; i++) правильнее написать for(i = k; i <= 0; i--) так пропадает необходимость в разности b[n-i]

Похожие вопросы