Вопрос изначально был помечен как ржавчина , поэтому я предположил, что в моем ответе, хотя этот тег уже удален.
Как уже говорили другие в комментариях,вам всегда придется увеличивать размер, иначе вы рискуете переполнить умножение, если только у вас нет каких-либо гарантий относительно границ размеров этих чисел.В Rust нет примитивного типа большего размера, чем u128
.
Обычным решением является переключение на структуры, поддерживающие арифметику произвольной точности , часто называемую "bignums" или "bigints".».Однако они значительно менее производительны, чем при использовании собственных целочисленных типов.
В Rust вы можете использовать num-bigint
ящик:
extern crate num_bigint;
use num_bigint::BigUint;
fn main() {
let a: u128 = 234234234234991231;
let b: u128 = 989087987;
let c: u128 = 123;
let big_a: BigUint = a.into();
let big_b: BigUint = b.into();
let big_c: BigUint = c.into();
let answer = big_a * big_b / big_c;
println!("answer: {}", answer);
// answer: 1883563148178650094572699
}