Cod sursa(job #1371674)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 3 martie 2015 23:34:09
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define SIZE 10000023
#define base 10
FILE *fin, *fout;
using namespace std;
int n[SIZE], d[SIZE], tmp[SIZE];
char s[SIZE], s1[SIZE];
bool check(int a[SIZE], int b[SIZE])
{
	if(a[0] < b[0]) return 1;
	if(a[0] > b[0]) return 0;
	for(int i = a[0]; i>=1; i--)
	{
		if(a[i] < b[i]) return 1;
		if(a[i] > b[i]) return 0;
	}
	return 0;
}
void adunare(int a[SIZE], int b[SIZE])
{
	int carry = 0, temp;
	a[0] = max(a[0], b[0]);
	for(int i = 1; i<=a[0]; i++)
	{
		temp = a[i] + b[i] + carry;
		a[i] = temp%base;
		carry = temp/base;
	}
	if(carry)
	{
		a[0]++;
		a[a[0]] = carry;
	}
}
void afisare(int a[SIZE])
{
	for(int i = a[0]; i>=1; i--) printf("%d", a[i]);
	printf("\n");
}
int main()
{
	fin = freopen("next.in", "r", stdin);
	fout = freopen("next.out", "w", stdout);
	scanf("%s", s);
	n[0] = strlen(s);
	for(int i = 1; i<= n[0]; i++) n[i] = s[n[0]-i] - '0';
	scanf("%s", s1);
	d[0] = strlen(s1);
	for(int i = 1; i<= d[0]; i++) d[i] = s1[d[0]-i] - '0';
	for(; ;)
	{
		if(check(tmp, n) == 0) break;
		adunare(tmp, d);
	}
	afisare(tmp);
	fclose(fin);
	fclose(fout);
	return 0;
}