Коментарі / Статті FTL / OOP - Портал об’єктно-орієнтованого програмування Подорожуй з gofrie.com
0
  • avatar
  • FTL
  • 19 листопада 2014, 08:27
0
Правильно, я перевіряв на плюсах, а C# не конвертує bool в int автоматично.

using System;
public class Program {
    public static int Puzzle(int number, int power) {    
         return power == 0 ? 1 : ((power & 1) == 1 ? number : 1) * Puzzle(number * number, power / 2);
    }
}

Тепер працює.
  • avatar
  • FTL
  • 19 жовтня 2014, 11:27
0
Та ладно, як на мене, ні разу не елегантно.

public class Program {
    public static int Puzzle(int number, int power) {    
         return power == 0 ? 1 : (power & 1 ? number : 1) * Puzzle(number * number, power / 2);
    }
}


Так вже краще.
  • avatar
  • FTL
  • 18 жовтня 2014, 22:11
+2
Ідея — хороша штука. Код в студію!
  • avatar
  • FTL
  • 01 грудня 2013, 00:31
0
Рішення, імхо, найкраще, але на C не проканає — в C нема конструкторів.
  • avatar
  • FTL
  • 27 листопада 2013, 21:32
+1
Якщо мета виправдовує засоби, і якщо сприймати умову буквально, то в принципі можна висмоктати з пальця щось таке:


#include <iostream>
#include <vector>
#include <exception>

void fillVector(const std::vector<size_t>& v, const size_t i)
{
	v.at(i - 1);
	std::cout << i << std::endl;
	try
	{
		fillVector(v, i + 1);
	}
	catch (...)
	{
	}
}

void printVector(const size_t a, const size_t b)
{
	if (a > b)
	{
		throw std::invalid_argument("Invalid interval");
	}
	fillVector(std::vector<size_t>(b - a + 1), a);
}

int main()
{
	printVector(1, 1000);
	return 0;
}
  • avatar
  • FTL
  • 22 листопада 2013, 21:36
0
Він то крисивіший, але на C не канає)
  • avatar
  • FTL
  • 18 листопада 2013, 09:58
+1
А щоб тільки сішними фічами, можна ще так
#include <iostream>

void print1(int n)
{
	std::cout << n + 1 << std::endl;
	std::cout << n + 2 << std::endl;
	std::cout << n + 3 << std::endl;
	std::cout << n + 4 << std::endl;
	std::cout << n + 5 << std::endl;
	std::cout << n + 6 << std::endl;
	std::cout << n + 7 << std::endl;
	std::cout << n + 8 << std::endl;
	std::cout << n + 9 << std::endl;
	std::cout << n + 10 << std::endl;
}

void print10(int n)
{
	print1(n + 0);
	print1(n + 10);
	print1(n + 20);
	print1(n + 30);
	print1(n + 40);
	print1(n + 50);
	print1(n + 60);
	print1(n + 70);
	print1(n + 80);
	print1(n + 90);
}

void print100(const int n)
{
	print10(n + 0);
	print10(n + 100);
	print10(n + 200);
	print10(n + 300);
	print10(n + 400);
	print10(n + 500);
	print10(n + 600);
	print10(n + 700);
	print10(n + 800);
	print10(n + 900);
}

int main()
{
	print100(0);
        return 0;
}
  • avatar
  • FTL
  • 18 листопада 2013, 00:33
+1
На плюсах можна так:

Файл Thousand.h
#ifndef _THOUSAND_H_
#define _THOUSAND_H_

#include <iostream>

template<int i>
class Thousand
{
public:
	Thousand()
	{
		Thousand<i - 1>();
		std::cout << i << std::endl;
	}
};

template<>
class Thousand<0>
{
public:
	Thousand()
	{

	}
};

#endif


Файл main.cpp
#include "Thousand.h"

int main()
{
	Thousand<1000>();
}
  • avatar
  • FTL
  • 17 листопада 2013, 18:59