高精度减法

#include
#include
#include
using namespace std;
struct HighAcc
{
char str[100];
int length;
int minflag;
};
int hacmp(HighAcc num1, HighAcc num2)
{
if (num1.length < num2.length)
{
return -1;
}
else if (num1.length > num2.length)
{
return 1;
}
for (int i=num1.length-1;i >=0;i–)
{
if (num1.str[i] > num2.str[i])
{
return 1;
}
else if (num1.str[i] < num2.str[i])
{
return -1;
}
}
return 0;
}
void reverse_str(HighAcc &num)
{
char* p = &num.str[0];
char* q = &num.str[num.length - 1];
char tmp = 0;
while (p <= q)
{
tmp = *p;
*p = *q;
q = tmp;
p++;
q–;
}
}
void Ture_num(HighAcc &num)
{
char
p = &num.str[0];
while (*p)
{
*p = *p - ‘0’;
p++;
}
}
HighAcc Sub(HighAcc num1, HighAcc num2)
{
Ture_num(num1);
Ture_num(num2);
reverse_str(num1);
reverse_str(num2);
HighAcc res = {0};
HighAcc Bigger = num1;
HighAcc Smaller = num2;
int ret = 0;
ret = hacmp(num1, num2);
if (ret == 0)
{
res.length = 1;
return res;
}
else if (ret == -1)
{
Bigger = num2;
Smaller = num1;
res.minflag = 1;
}
int tmp = 0;
for (int i = 0;i < Bigger.length;i++)
{
tmp = Bigger.str[i] + 10 - Smaller.str[i]+res.str[i];
res.str[i] = tmp % 10;
res.str[i + 1] = tmp / 10 - 1;
}
res.length = Bigger.length;
for (int i = Bigger.length - 1;res.str[i]0;i–)
{
res.length–;
}
return res;
}
void Printf(HighAcc tmp)
{
if (tmp.minflag
1)
cout << ‘-’;
for (int i = tmp.length - 1;i >= 0;i–)
{
printf("%d", tmp.str[i]);
}
}
int main()
{
HighAcc num1 = {0};
cout << "请输入第一个字符串: ";
cin >> num1.str;
cin.clear();
num1.length = strlen(num1.str);
HighAcc num2 = {0};
cout << "请输入第二个字符串: ";
cin >> num2.str;
cin.clear();
num2.length = strlen(num2.str);
HighAcc res = Sub(num1, num2);
Printf(res);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值