基本思路:对于给定的两个数值,把其当成字符串,进一步转化成整型,逆序存放在整型数组中,对其每一个位进行相减,但是要注意借位的使用,最后为了保险在设置一个循环,把前置0去掉,最后输出结果。
AC代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#define N 100010
using namespace std;
int main()
{
char sa[N], sb[N];//输入的两个数
scanf("%s",&sa);
scanf("%s",&sb);
int a[N]={0}, b[N]={0},c[N]={0};//定义用作转化成整型存放的数组
int la,lb,i,t=0;
la=strlen(sa);//计算长度
lb=strlen(sb);//计算长度
for(i = la-1; i >= 0; i--)
a[la-i-1]=sa[i]-'0';//把第一个数逆序存放到整型数组中
for(i = lb-1; i >= 0; i--)
b[lb-i-1]=sb[i]-'0';//把第二个数逆序存放到整型数组中
while(a[la-1]== 0 )
la- - ;//如果有0的话,就去掉
while(b[lb-1]== 0)
lb- -;
int max=la;
if(max<lb)
max=lb;//求最大长度
if (strcmp(sa,sb)== 0)//相等时
{
printf("0");
return 0;
}
else if (la<lb||(la == lb&&strcmp(sa,sb)==-1))//当被减数大于减数的时候进行交换,并输出'-'号
{
for(i=0;i<lb;i++)
{
t=a[i];
a[i]=b[i];
b[i]=t;
}
printf("-");
}
for(i=0;i<max;i++)//对于每一个小单位进行减法运算
{
if(a[i]<b[i])//判断对应的值谁大谁小
{
a[i]=a[i]+10;
a[i+1]--;//借位的使用
}
c[i]=a[i]-b[i];//把结果存放到 一个新的数组中
}
for(;i>=0;i--)
if(c[i]!=0)
break;//去掉结果前面的0
for(;i>=0;i--)
printf("%d",c[i]);//输出结果
return 0;
}
注意:
1.借位要熟练其规则
2.涉及到负数和0比较麻烦,需要对其进行限制