题目描述
给定两个正整数,计算它们的差,计算结果可能为负数。
输入
共两行,每行包含一个整数。
1≤整数长度≤105
输出
共一行,包含所求的差。
样例输入
32
11
样例输出
21
#include <bits/stdc++.h>
#include <iostream>
#include <string.h>
using namespace std;
const int N = 100010;
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;
bool flag=false;
//确定字符串长度
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';
//去除前缀0 例如00023
while(a[la-1]==0)la--;
while(b[lb-1]==0)lb--;
//求出最大长度
int max=la;
if(max<lb)max=lb;
//如果两个数相等 相减的0
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++)
{
int t=a[i];
a[i]=b[i];
b[i]=t;
}
printf("-");
}
//运算
for(i=0;i<max;i++)
{
t=a[i]-b[i];
//flag标志位记录是否被借位
if(flag)
--t;
flag=false;
if(t<0)
{
flag=true;
t+=10;
}
//减数存入c数组中
c[i]=t;
}
for(int j=i-1;j>=0;j--)
printf("%d",c[j]);
return 0;
}
不过您的代码会出现99-100=-01的情况
谢谢你的新手版,我不会他们的cmp那个bool,vector不太会
高精度减法QAQ
我是新手,有错请指教,思路没有问题,我知道有部分样例不对
%%dalao