Cod sursa(job #72711)

Utilizator zobicaMarin Marin zobica Data 15 iulie 2007 03:49:00
Problema Sarpe Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream>

using namespace std;

int a[2];
int n[2005];
int n1[2005];
int n2[2005];
int r[2005];
int r1[2005];
int r2[2005];
int r3[2005];


void citire(){
	ifstream fin("sarpe.in");
	n[0] = 0;
	char x;
	fin.get(x);
	while (!fin.eof()){			
		n[++n[0]] = x - '0';
		fin.get(x);
	}
	fin.close();
}

void invers(int a[]) {
	for (int i = 1; i <= (a[0] >> 1); i ++) {
		int aux = a[i];
		a[i] = a[a[0] - i + 1];
		a[a[0] - i + 1] = aux;
	}
}

void inmultire(int a[], int b[], int c[]){
	int t = 0, p = 0;
	for(int i = 1; i<= b[0]; i++) {
		t = 0;
		for(int j = 1; j <= a[0]; j++){
			int cif = a[j] * b[i] + t;
			t = cif / 10;
			c[j + p] += cif % 10;
		}
		if(t > 0)
			c[a[0] + p + 1] = t;
		p++;
	}
	p--;
	t = 0;
	for(int j = 1;j <= a[0] + p; j++){
		c[j + 1] += c[j] / 10;
		c[j ]%= 10;
	}
	c[0] = a[0] + p;
	if (c[c[0] + 1])
		c[0] ++;
	
}


void adun(int a[], int b[], int c[]) {
	int t =0;
	int n = (a[0] > b[0]) ? a[0] : b[0];
	for (int i = 1; i <= n; i ++) {
		int cif = a[i] + b[i] + t;
		c[i] = cif % 10;
		t  = cif / 10;
	}
	if (t > 0) 
		c[n ++] = t;
	c[0] = n;
}

void scad_1(int a[]){
	a[1] --;
	int i = 1;
	while (i <= a[0] && a[i] < 0) {
		a[i + 1]--;
		a[i++] += 10;
	}
}

void afisare(int a[]){
	ofstream fout("sarpe.out");	
	for(int i = a[0] ; i > 0 ; i--)
		fout << a[i];
	fout.close();    
}


int main() {
	citire();
	invers(n);
	a[0] = 1;
	a[1] = 4;
	inmultire(a, n, r1);	
	memcpy(n1, n, sizeof(n));
	scad_1(n1);
	memcpy(n2, n1, sizeof(n1));
	scad_1(n2);
	inmultire(n1, n2, r2);
	a[0] = 1;
	a[1] = 2;
	inmultire(a,r2, r3);
	adun(r1, r3, r);
	afisare(r);
	return 0;
}