Занятие 3. Справочник

Занятие 3. Справочник

Функция быстрого возведения в степень
static double binpow (double a, int n) 
{
	if (n == 0)
		return 1;
	if (n % 2 == 1)
		return binpow (a, n-1) * a;
	else {
		double b = binpow (a, n/2);
		return b * b;
             }
}
Разложение на слагаемые
import java.io.*;
import java.util.Scanner;

public class Test {

	static PrintWriter out = new PrintWriter(System.out);
	static Scanner in = new Scanner(System.in);
	
	static int[] m = new int[41]; //из максимальных ограничений                   
	static int S = 0;
	static int N = 0;

	public static void main(String[] args) 
        {
		N = in.nextInt();
		m[0] = 1;
		solve(1);
                out.flush();
	}
	
	static void solve(int k)
	{
      	for (int i = m[k - 1]; S + i <= N; i ++)
	     {
	           m[k] = i;
	           S += m[k];
		   if (S == N) printSolution(k); //решение найдено, выводим!
		   else solve(k + 1);
		   S -= m[k];
	      }
	}
	
	static void printSolution(int k)
	{
		for (int i = 1; i <= k; i++)
		{
			out.print (m[i] + " ");
		}
		out.println();
	} 
}