Cod sursa(job #1508080)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 22 octombrie 2015 11:46:59
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <algorithm>
#include <cstring>
#include <array>
#include <iostream>
using namespace std;

constexpr int maxn = 2000000;
using bignum = array<char, maxn+1>;

void find_size(bignum& a){
	for(int i = 1; i <= maxn; ++i){
		if(a[i] != '0'){
			a[0] = i; } } }

void div(bignum& a, const long long b){
	for(int i = a[0], x = 0, tmp; i > 0; --i){
		x *= 10;
		x += a[i]-'0';
		a[i] = x/b+'0';
		x %= b; }
	find_size(a); }

void mult(bignum& a, const long long b){
	for(int i = 1, x = 0; i <= a[0] || x; ++i){
		x += (a[i]-'0') * b;
		a[i] = x%10+'0';
		x /= 10; }
	find_size(a); }

void add(bignum& a, long long b){

	for(int i = 1, x = 0; i <= a[0] || x; ++i, b /= 10){
		x += a[i] - '0' + (b%10);
		a[i] = (x%10) +'0';
		x /= 10; }

	find_size(a); }

void citeste(ifstream& f, bignum& a){
	f.get(&a[1], maxn, '\n');
	a[0] = strlen(&a[1]);
	for(int i = a[0]+1; i <= maxn; ++i){
		a[i] = '0'; }
	reverse(begin(a)+1, begin(a) + a[0]+1); }

void scrie(ostream& g, const bignum& a){
	for(int i = a[0]; i > 0; --i){
		g << a[i]; } }

int main(){
	ifstream f("next.in");
	ofstream g("next.out");
	bignum n;
	int d;

	citeste(f, n);
	f >> d;

	div(n, d);
	mult(n, d);
	add(n, d);
	scrie(g, n);
	return 0; }