Cod sursa(job #527660)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 31 ianuarie 2011 23:49:01
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
# include <fstream>
  using namespace std;
    std :: ifstream f ("next.in");
	std :: ofstream g ("next.out");
	char c;
	short a[1000100];
	long long l;
	long long nn;
	long long D;
	inline bool cifra (char c){
		if (c >= '0' && c <= '9') return true;
		return false;
	}
	long long mod (short A[], long long B){
        long long i, t = 0;
        for (i = l; i > 0; i--)
			t = (t * 10 + A[i]) % B;
        return t;
    }
	void suma (short A[], short B[]){
        long long i, t = 0;
        for (i = 1; i <= l || i <= B[0] || t; i++, t /= 10)
            A[i] = (t += A[i] + B[i]) % 10;
        l = i - 1;
    }
	short x[30];
	int main (){
		while (cifra (c = f.get ())){
			a[++l] = c - '0';
		}
		for (int i = 1, lim = (l >> 1); i <= lim; ++i){
			short x = a[i];
            a[i] = a[l - i + 1];
			a[l - i + 1] = x;
		}
		f >> D;
		nn = mod (a, D);
		if (!nn){
			for (long long i = l; i > 0; --i)
			    g << a[i];
		    return 0;
		}
		nn = D - nn;
		while (nn){
			x[++x[0]] = nn % 10;
			nn = nn / 10;
		}
		suma (a, x);
		for (long long i = l; i > 0; --i)
			g << a[i];
		g.close ();
		return 0;
	}