当前位置: 代码迷 >> 综合 >> 2022/2/15总结
  详细解决方案

2022/2/15总结

热度:11   发布时间:2023-12-05 11:19:12.0

今天继续高精度的四则运算,原理昨天已经了解过了。

高精度减法:

bign jian(bign a, bign b)
{bign c;for(int i = 0; i < a.lenth || i < b.lenth; i++){if(a.d[i] < b.d[i]){  //如果出现不够减的情况 a.d[i + 1]--; //向高的一位借位 a.d[i] += 10; //当前位加10 }c.d[c.lenth++] = a.d[i] - b.d[i]; //减法结果为当前位的结果 }while(c.lenth - 1 >= 1 && c.d[c.lenth - 1] == 0){c.lenth--; //去除高位的0}return c;
}

高精度乘法:

bign multiply(bign a, bign b)
{bign c;int carry = 0;for(int i = 0; i < a.lenth; i++){int temp = a.d[i] * b + carry;c.d[c.lenth++] = temp % 10;carry = temp / 10;  //高位部分作为新的进位 }while(carry != 0){ //乘法的进位可能不止一位 c.d[c.lenth++] = carry % 10;carry /= 10;}return c;
}

高精度除法:

bign divide(bign a, int b, int& r) //r为余数 
{bign c;c.lenth = a.lenth;  //被除数的每一位与商的每一位一一对应 for(int i = a.lenth - 1; i >= 0; i--){r = r * 10 + a.d[i]; //与上一位遗留的余数组合 if(r < b){c.d[i] = 0;  //不够除,该位为0 }else{c.d[i] = r / b; //够除,为商 r = r % b;  //获得新余数 }}while(c.lenth - 1 >= 1 && c.d[c.lenth - 1] == 0){c.lenth--;  //去除高位的0 }return c;
}