高精度计算
Posted dongdong25800
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度计算相关的知识,希望对你有一定的参考价值。
高精度加法
#include<bits/stdc++.h>
using namespace std;
int x[1000005];
int main()
{
string a,b;
cin>>a>>b;
if(a.size()<b.size())
swap(a,b);
for(int i=1; i<=a.size(); i++)
x[i]=a[a.size()-i]-‘0‘;
for(int i=1; i<=b.size(); i++)
x[i]+=b[b.size()-i]-‘0‘;
for(int i=1; i<=a.size(); i++)
{
if(x[i]>=10)
{
x[i]-=10;
x[i+1]++;
}
}
int len=a.size();
if(x[len+1]>0)
len++;
for(int i=len; i>=1; i--)
printf("%d", x[i]);
}
做法:得到两个数字串a,b以后,使a串长度默认比b大,否则交换,然后用x数组倒着装a,b两个数字串,然后相加,大于10的进一位,然后特判有没有长度+1,最后在将x数组倒着输出即可。
高精度减法
#include<bits/stdc++.h>
using namespace std;
int x[10005];
int main()
{
string a,b;
cin>>a>>b;
int flag=0;
if(a.size()<b.size())
{
swap(a,b);
flag=1;
}
if(a.size()==b.size())
{
for(int i=0; i<a.size(); i++)
{
if(a[i]<b[i])
{
flag=1;
break;
}
}
if(flag==1)
swap(a,b);
}
for(int i=1; i<=a.size(); i++)
x[i]=a[a.size()-i]-‘0‘;
for(int i=1; i<=b.size(); i++)
x[i]-=b[b.size()-i]-‘0‘;
for(int i=1; i<=a.size(); i++)
{
if(x[i]<0)
{
x[i]+=10;
x[i+1]--;
}
}
int len=a.size();
while(x[len]==0)
{
len--;
if(len==0)
{
printf("0");
return 0;
}
}
if(flag==1)
printf("-");
for(int i=len; i>=1; i--)
printf("%d", x[i]);
return 0;
}
做法:先判断一下被减数和减数的大小关系,如果被减数更小的话用flag记录一下输出时加负号,同时在交换一下a,b,使默认a比b大,然后用x数组倒着装a,然后再倒着减b数组,
然后判断x数组有没有负数,有的话+10,后面一位-1,最后特判一下x数组长度,末尾0要去掉,然后倒着输出即可。
以上是关于高精度计算的主要内容,如果未能解决你的问题,请参考以下文章