标签:大小 name 个数 没有 ++ turn style 精度 clu
高精度加法
#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要去掉,然后倒着输出即可。
标签:大小 name 个数 没有 ++ turn style 精度 clu
原文地址:https://www.cnblogs.com/dongdong25800/p/10542379.html