summaryrefslogtreecommitdiffstats
path: root/mat/euler/16/prog.c
blob: 5a2d7f3285b12db4923d69f9855d70993d58487b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>
#define DISABLE_LIB_TESTS
#include <mnozi.c>
#define MAX_SIRINA 80*(24-3) /* zapolnimo malo teminalsko okno */
#define MAX_SIRINA_S "1680" /* = 80 * 21; nastavi tudi to za format stavek */
int main (int argc, char ** argv) {
	if (argc != 1+2) {
		fprintf(stderr, "uporaba: %s <Številka> (^) <Številka>\nprimer za izračun 2^1000: %s 2 1000\n", argv[0], argv[0]);
		return 1;
	}
	unsigned long long int n = strtoull(argv[1], NULL, 10);
	unsigned long long int m = strtoull(argv[2], NULL, 10);
	if (m == 0) {
		fprintf(stderr, "KARKOLI NA NIČ JE ENA! (reci to računalniku)\n");
		return 2;
	}
	char * z = malloc(sizeof(char)*(MAX_SIRINA + 1)); // + 1 za \0
	unsigned int l = MAX_SIRINA;
	unsigned long long int s = 0; // Seštevek števk
	sprintf(z, "%0" MAX_SIRINA_S "llu", n);
	z[MAX_SIRINA] = '\0';
	for (; m > 1; m--)
		// fprintf(stderr, "\rpreostane še %llu operacij ...", m);
		mnozi (n, z, l);
	for (m = 0; m < MAX_SIRINA; m++) // sicer je m itak že 0 ampak okej
		s = s + (z[m] - '0');
	fprintf(stdout, "\rkonec računanja. seštevek števk v rezultatu je %llu, število je\n%s\n", s, z);
	return 0;
}