大数问题
Jerry Lee の blog
never never never give up.
展开
-
大整数的存储
大整数的存储定义int型数组d[1000],整数的高位存储在数组的高位,整数的低位存储在数组的低位。 而把整数按字符串读入的时候,实际上是逆序存储的 。因此在读入之后需要另存到d[]数组的时候需要反转一下。定义大数 数据类型 bign:struct bign{ int d[1000]; int len; bign() { fill(d,d+1000,原创 2017-11-23 19:20:50 · 909 阅读 · 0 评论 -
大整数的加法
大整数的加法加法的步骤: 将该位上的两个数字与进位相加,得到的结果取个位数作为该位结果,取十位数作为新的进位。加法部分程序://高精度a+b bign add(bign a,bign b){ bign c; //carry是进位 int carry=0; //以较长的作为界限 for(int i=0;i<a.len|| i<b.len ;i++)原创 2017-11-23 20:28:37 · 316 阅读 · 0 评论 -
大数减法
大数减法减法步骤: 对某一步,比如a-b,比较被减位和减位,如果不够减,就让被减数的高位减1,被减数+10,再进行减位;如果够减,就直接减。 最后一步要注意减法后高位可能有多余的0,要去除他们,还要保证结果至少有一位数。减法部分程序://高精度a-bbign sub(bign a,bign b) { bign c; //以较长的为界限 for(int i=0原创 2017-11-23 20:38:26 · 249 阅读 · 0 评论 -
大数乘法
大数乘法乘法步骤: 取bign 的某一位与int型整数相乘,再与进位相加,所得结果的个位数作为该位的结果,高位部分作为新的进位。乘法部分程序://高精度乘法bign mul(bign a,int b) { bign c; //进位 int carry=0; for(int i=0;i<a.len;i++) { int temp=a.d[原创 2017-11-23 20:48:57 · 587 阅读 · 1 评论 -
大数除法
大数除法除法步骤: 上一步的余数乘以10加上该步的位,得到该步临时的被除数,将其与除数比较:如果不够除,则该位的商为0;如果够除,则商就是对应的商,余数就是对应的余数。最后一步要注意最后高位可能有多余的0,要去除他们,但也要保证结果至少有一位数。//高精度除法,r为余数bign div(bign a,int b,int& r) { bign c; //被除数的每一位和商的每一位原创 2017-11-23 20:59:42 · 792 阅读 · 0 评论