I_love_myself's blog

By I_love_myself, 6 years ago, In Russian

Добрый день, каждый раз, когда я пишу длинку, мне больно .

const int LOG = 50, RADIX = 1e+9;
struct BigInt {
	int a[LOG], len;
	BigInt(int x = 0) {
		len = 1;
		memset(a, 0, sizeof a);
		a[0] = x;
	}

	BigInt operator+(BigInt &other) {
		BigInt res;
		res.len = max(len, other.len);

		int c = 0;
		for (int i = 0; i < res.len || c; i++) {
			res.len = max(res.len, i + 1);
			int t = c + a[i] + other.a[i];
			c = t / RADIX;
			res.a[i] = t % RADIX;
		}

		return res;
	}

	BigInt operator+=(BigInt other) {
		return *this = *this + other;
	}
};

Я не раз ошибаюсь, пишу место res.a[i] просто res[i], да и с идейной точки зрения это логично. И тут до меня дошло, что оператор[] тоже можно перегрузить, но как это сделать так, чтобы можно было ставить его в левостороннюю часть выражения я не знаю, кто мне может с этим помочь? То есть я хочу, чтобы я мог написать выражение: res[i] = 1; и оно было эквивалентно res.a[i] = 1;

Upd: решено, спасибо!

  • Vote: I like it
  • +26
  • Vote: I do not like it