11.6 进制转换(正整数)11.7 高精度算法(压位存储)

本文介绍了如何使用C++进行正整数的进制转换和高精度算法的压位存储。进制转换通过短除法和秦九韶算法进行,而高精度算法则利用10000进制存储以提高效率。文章还讨论了高精度数的定义、赋值、比较、四则运算以及二分优化的除法,并提供了输入输出的方法。
摘要由CSDN通过智能技术生成

11.6 进制转换(正整数)
(1) 十进制变 N 进制
短除法:不断地除 N,直到那个数变成 1。把所有的余数连接到一起,就是转换后的 N 进制数。

// bit[]是对应的N进制位,top是N进制下的最后一位数字的序号(从0开始)
void convertTo(int num, int base, int *bit, int &top)
{
top=-1;
do
{
bit[++top] = num%base; // 可直接输出num%base
num/=base;
} while (num>0);
}

 (2) N 进制变十进制
大家应该知道怎样将 N 进制转变为十进制。现在,用秦九韶算法进行计算。

// bit[]是对应的N进制位,top是N进制下的最后一位数字的序号(从0开始)
// 返回值是十进制数。
int convertFrom(int base, int *bit, int top)
{
int ans=0;
for (int i=top; i>=0; i--)
{
ans*=base;
ans+=bit[i];
}
return ans;
}

11.7 高精度算法(压位存储)!

有的时候,数字会大到连 long long 都不能承受的程度。这时,我们可以自己模拟大数的各种运算。
所谓压位存储,就是在高精度数内部采用 10000 进制(即每四位放到一个数中)进行存储。它与 10 进制(即一个数位对应一个数)相比速度要快一些。
高精度数内部也可以采用 100000000 进制,但是这样就不能计算乘除法了。
(1) 定义
编程时这样做——假设 hp 是高精度类型。
先用宏定义:#define hp long long①,然后集中精力编写算法代码。
最后直接删除这条宏定义,把真正的高精度算法写出来。这样做的好处是无需再修改算法代码,减小了维护代价。

const int MAX=100;
struct hp
{
int num[MAX];
hp & operator = (const char*);
hp & operator = (int);
hp();
hp(int);
// 以下运算符可以根据实际需要来选择。
bool operator > (const hp &) const;
bool operator < (const hp &) const;
bool o
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值