PDA

View Full Version : سوال: آیا راهی برای محاسبه مبنای دو بدون آرایه هست؟



irpersian20
جمعه 18 مرداد 1392, 23:16 عصر
سلام
خواستم بدونم آیا راهی برای حساب یک عدد در مبانی دو بدون آرایه هم وجدو داره؟
مثلا 11 ببریم مبانی 2 بدون استفاده از اارایه

omidshaman
شنبه 19 مرداد 1392, 00:29 صبح
http://barnamenevis.org/showthread.php?367017-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%85%D8%A8%D9%86%D8%A7-%D8%A8%D9%87-16&highlight=%D9%85%D8%A8%D9%86%D8%A7
روشش تو همین مایه ها میشه

مصطفی ساتکی
شنبه 19 مرداد 1392, 07:33 صبح
به این صورت:
int src=10;
int base = 0;
int res =0;
while(src )
{
int mod = src % 2;
src /=2;
res += base * mod ;
base = base?base*10:10;

}
cout << res;

omidshaman
شنبه 19 مرداد 1392, 13:27 عصر
همون بالایی یک مقدار سریع تر

int src=100;
int base = 1;
int res =0;
int mod=0;
while(src)
{
res += base * mod ;
src /=2;
mod = src % 2;
base *=10;
}
cout << res;

مصطفی ساتکی
شنبه 19 مرداد 1392, 13:39 عصر
کد درست خودم .امید جان کد شما هم مشکل داره با عدد 9 چکش کن.

int src=10;
int base = 1;
int res =0;
while(src )
{
int mod = src % 2;
src /=2;
res += base * mod ;
base = base*10;

}
cout << res;

omidshaman
شنبه 19 مرداد 1392, 14:13 عصر
آره اون اشتباست من فقط با 10 و 100 چک کردم :)
درستش میشه چیزی که شما نوشتین
البته این هنوز کامل نیست سریع overflow میکنه یعنی مثلا 1600جواب نمیده
مدل کاملترش به ارایه هم نیاز داره !

Ananas
شنبه 19 مرداد 1392, 17:42 عصر
مشخصا برای مبنای دو از عملیات بیتی هم میتونیم استفاده کنیم:

src = 55;
for (int i = 31; i >=0 ; i--)
{
cout << ( (src & (1 << i)) != 0) ;
};

omidshaman
شنبه 19 مرداد 1392, 18:26 عصر
مبنا با استفاده از شیفت overflow هم نمی کنه دیگه

#include <iostream>
using namespace std;
typedef unsigned int uint;
int main()
{
uint src=1600;
uint power=1;
int SIZE=0;
{
uint temp=src;
while(temp)
{
temp=temp>>1;
power=power<<1;
SIZE++;
}
}
bool result[SIZE]; //bazi compilera ejaze nemidan bayad az new estefade beshe
for(int i=SIZE-1,i2=0;i>-1;i--,i2++)
{
power=power>>1;
uint a=src>>i;
result[i2] = a ;
src -= power*a;
}

//! show result
for(int i=0;i<SIZE;i++)
cout<<result[i];
return 0;
}