Sorumuz; Mesela elimizde 10010110 diye dizimiz olsun. İlk önce birleri sıfır; sıfırları bir yapıp(01101001) sonra ikilik sistemde bir ekleyen program yazalım. Sonuc 01101010 olacak.
C 'ye göre programımız;
char dizi[9];
int i=0,elde=1;
for(i=0;i<8;i++)
scanf("%d",&dizi[i]);
for(i=0;i<8;i++)
{
if(dizi[i]==0)
dizi[i]=1;
else dizi[i]=0;
}
for(i=0;i<8;i++)
printf("%d",dizi[i]);
for(i=7;i>-1;i--)
{
switch(elde)
{
case 0: if(dizi[i]==0)
{
elde=0;
dizi[i]=0;
} else
{
elde=0;
dizi[i]=1;
}
break;
case 1: if(dizi[i]==1)
{
elde=1;
dizi[i]=0;
} else
{
elde=0;
dizi[i]=1;
}
break;
}
}
printf("\n");
for(i=0;i<8;i++)
printf("%d",dizi[i]);
Not : Her zamanki gibi farklı ve daha basit yöntem ile çözülebilir.
Eğer her zaman 8 karakter uzunluğunda girdiler ile çalışacaksak yazdığınız kod bit-wise işlemlerle daha da kısalabilir bence. Yani okuduğumuz string'i bir adet char tipli değişkene yazarız. DAha sonra bu değeri 256 dan çıkarırsak 1'ler ve 0'lar yer değişmiş olur. Sonra buna a+=1; gibi basit bir toplama işlemiyle 1 ekleyip shift'leye shift'leye basabiliriz (<< veya >> operatörleriyle) :)
YanıtlaSiltabi ki başka ve daha mantıklı yöntemlerle çözülebilir. Ben çok basitten alarak yazmıştım. Yeni başlayanlar daha rahat kavrasın diye. Ama yönteminiz güzel. Onu da deneyip yazayım.
YanıtlaSilBahsettiğim yöntemin kodunu http://snowy73.eu5.org/tmp/bitwise.c adresinden çekebilir merak edenler. Elimden geldiğince anlatamaya çalıştım kodu satır satır.
YanıtlaSilBir de ilgili arkadaşlar http://projecteuler.net/ adresinden kayıt olup bunun gibi problemleri çözmekle uğraşabilirler. Tavsiye ederim.