Loading...
plamenppp avatar plamenppp 5 Точки

Некоректен отговор при побитови перации!

Проблемът е следният:

Решавам последната задача на кандидатстудентският изпит от 11 april 2014 morning.

Разгледах авторовите решения и измислих друг начин за решение, но нещо ми куца много грозно :(

Пращам само това, което не работи както трябва:

using System;

namespace letters
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            ulong n = ulong.Parse (Console.ReadLine ());
            int result = 0;
            int i;
            for (i = 0; i < 64; i++) {
                if ((n & (1u << i)) != 0) {
                    result++;
                    Console.Write (i+ " ");
                }
            }

            Console.WriteLine (result);

        }
    }
}

При въвеждане на 165 ми изписва като отговор: 0 2 5 7 32 34 37 39 8, където посленото число трябва да е броят на 1-ците в двоичното представяне на 165, а останалите числа трябва да са позициите на 1-ците. Реално 1-ците са 4 на брой, а позициите са 0 2 5 и 7. Къде греша?

П.П. Поради пуста немотия и зачитане на авторските права използвам Ubuntu и Monodevelop.

Тагове:
0
Programming Basics 07/01/2016 13:00:33
Filkolev avatar Filkolev 4482 Точки

 if ((n & (1u << i)) != 0)

1u е литерал за unsigned int, който е 32-битов. Промени го на ul и ще се оправи.

ПП. Спазвай все пак конвенциите на C# - отварящите къдрави скоби трябва да са на нов ред, а не на същия. Също така няма практика итерационната променлива на циклите да се декларира извън телата им, както си направил с i при for-цикъла.

0
plamenppp avatar plamenppp 5 Точки

Да, Fillkolev, моя грешка, благодаря много!

MonoDeveloper постоянно ми слага къдравите скоби на горния ред и отдавна спрях да се мъча да ги оравям.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.