一、减法
(1)第一个数减第二个数(大小未知)
思想( +- | 大-小 | ):用字符串来存两个大数,将两数倒置分别存放在两个整形数组中(num1[],num2[]),然后比较两个数的大小,如果第一个数大,那么就是num1[]-num2[],即 |num1-num2|,如果第二个数大,那么就是负的num2[]-num1[],即 -|num2-num1|;相减过程:倒置之后从头开始逐位相减,如果<0,该位置的+10,然后下一个位置-1,即( num1[i]=num1[i]+10, num1[i+1]-- ),然后倒置输出。
输入:
5465456661563132
478465465456
输出:
464978196097676
输入:
11111111
11111111
输出:
0
输入:
5465465465465444444
6645465456546454545
输出:
-999991081010101
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=5000;
string a,b;
int num1[N];
int num2[N];
int k;
int fun()
{
int t,i,j=0;
t=b.size();
if(a>=b&&a.size()>=b.size())
{
k=1;
t=a.size();
}
for(i=a.size()-1;i>=0;i--)
{
num1[j++]=a[i]-'0';
}
j=0;
for(i=b.size()-1;i>=0;i--)
{
num2[j++]=b[i]-'0';
}
if(k)
{
for(i=0;i<t;i++)
{
num1[i]=num1[i]-num2[i];
if(num1[i]<0)
{
num1[i]=num1[i]+10;
num1[i+1]--;
}
}
for(i=t-1;i>0;i--)
{
if(num1[i]==0)
{
t--;
}
}
return t;
}
else
{
for(i=0;i<t;i++)
{
num2[i]=num2[i]-num1[i];
if(num2[i]<0)
{
num2[i]=num2[i]+10;
num2[i+1]--;
}
}
for(i=t-1;i>0;i--)
{
if(num2[i]==0)
{
t--;
}
}
return t;
}
}
int main()
{
k=0;
int n,i;
cin>>a>>b;
n=fun();
if(k)
{
for(i=n-1;i>=0;i--)
{
cout<<num1[i];
}
}
else
{
cout<<"-";
for(i=n-1;i>=0;i--)
{
cout<<num2[i];
}
}
return 0;
}
(2)无论输入如何都是大数-小数
思想( | 大-小 | ):用字符串来存两个大数,将两数倒置分别存放在两个整形数组中(num1[],num2[]),然后比较两个数的大小,如果第一个数大,那么就是num1[]-num2[],即 |num1-num2|,如果第二个数大,那么就是num2[]-num1[],即 |num2-num1|;相减过程:倒置之后从头开始逐位相减,如果<0,该位置的+10,然后下一个位置-1,即( num1[i]=num1[i]+10, num1[i+1]-- ),然后倒置输出。
输入:
5465456661563132
478465465456
输出:
464978196097676
输入:
11111111
11111111
输出:
0
输入:
5465465465465444444
6645465456546454545
输出:
999991081010101
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=5000;
string a,b;
int num1[N];
int num2[N];
int k;
int fun()
{
int t,i,j=0;
t=b.size();
if(a>=b&&a.size()>=b.size())
{
k=1;
t=a.size();
}
for(i=a.size()-1;i>=0;i--)
{
num1[j++]=a[i]-'0';
}
j=0;
for(i=b.size()-1;i>=0;i--)
{
num2[j++]=b[i]-'0';
}
if(k)
{
for(i=0;i<t;i++)
{
num1[i]=num1[i]-num2[i];
if(num1[i]<0)
{
num1[i]=num1[i]+10;
num1[i+1]--;
}
}
for(i=t-1;i>0;i--)
{
if(num1[i]==0)
{
t--;
}
}
return t;
}
else
{
for(i=0;i<t;i++)
{
num2[i]=num2[i]-num1[i];
if(num2[i]<0)
{
num2[i]=num2[i]+10;
num2[i+1]--;
}
}
for(i=t-1;i>0;i--)
{
if(num2[i]==0)
{
t--;
}
}
return t;
}
}
int main()
{
k=0;
int n,i;
cin>>a>>b;
n=fun();
if(k)
{
for(i=n-1;i>=0;i--)
{
cout<<num1[i];
}
}
else
{
// cout<<"-";
for(i=n-1;i>=0;i--)
{
cout<<num2[i];
}
}
return 0;
}