複製** **如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxl = 500;
struct bignum
;
//高精度比較 a > b return 1, a == b return 0; a < b return -1;
int comp(bignum &a, bignum &b)
//高精度加法
bignum add(bignum &a, bignum &b)
}
if(c.num[len])
len++;
c.len = len;
return c;
}
//高精度減法,保證a >= b
bignum sub(bignum &a, bignum &b)
}
while(c.num[len] == 0 && len > 1)
len--;
c.len = len;
return c;
}
//高精度乘以低精度,當b很大時可能會發生溢位int範圍,具體情況具體分析
//如果b很大可以考慮把b看成高精度
bignum mul1(bignum &a, int &b)
for(i = 0; i < len; i++)
}
while(c.num[len] > 0)
c.len = len;
return c;
}
//高精度乘以高精度,注意要及時進製,否則肯能會引起溢位,但這樣會增加演算法的複雜度,
//如果確定不會發生溢位, 可以將裡面的while改成if
bignum mul2(bignum &a, bignum &b)
}} len = a.len+b.len-1;
while(c.num[len-1] == 0 && len > 1)
len--;
if(c.num[len])
len++;
c.len = len;
return c;
}
//高精度除以低精度,除的結果為c, 餘數為f
void div1(bignum &a, int &b, bignum &c, int &f)
while(len > 1 && c.num[len-1] == 0)
len--;
c.len = len;
}
//高精度*10
void mul10(bignum &a)
//高精度除以高精度,除的結果為c,餘數為f
void div2(bignum &a, bignum &b, bignum &c, bignum &f)
}
while(len > 1 && c.num[len-1] == 0)
len--;
c.len = len;
}
void print(bignum &a) //輸出大數
//將字串轉為大數存在bignum結構體裡面
bignum twww.cppcns.comonum(char *s)
void init(bignum &a, char *s, int &tag) //將字串轉化為大數
a.len = j;
for(; s[i] != '\0'; i++, j--)
a.num[j-1] = s[i]-'0';
}
int main(void)
else
}
return 0;
}
本文標題: 大數(高精度數)模板(分享)
本文位址:
高精度整數模板
include define maxlen 450 陣列長度上限,可以根據需求自行設定 define base digit 9 運算的進製,9代表以10 9計算 define base 1000000000 10 9進製 define printchar d 專長整數輸出定義的字串 define i...
高精度 數樓梯
洛谷 p1255 數樓梯 題目描述 樓梯有n階,上樓可以一步上一階,也可以一步上二階。編乙個程式,計算共有多少種不同的走法。分析 只用稍微用用腦子就可以看出,這是一道斐波那契數列的問題 不過省略了開頭的1,即這裡的數列為 12358 注意n 0,1,2的情況。然而這題需要高精所以寫的特別長 incl...
高精度 數樓梯
題目 樓梯有n階,上樓可以一步上一階,也可以一步上二階。編乙個程式,計算共有多少種不同的走法。乙個數字,樓梯數。走的方式幾種。輸入 1 複製 4輸出 1 複製 5說明 提示 60 n 50 100 n 5000 原本一看,這不是 斐波那契數列 嗎,直接公式下去寫完,dp i dp i 1 dp i ...