题目描述
给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1 ≤ 整数长度 ≤10^5
输入样例
在这里给出一组输入。例如:
32
11
输出样例
在这里给出相应的输出。例如:
21
#include<stdio.h>
#include<string.h>
int* subFunc(int arr1[],int arr2[],int maxlen){
int i;
for(i=maxlen-1;i>=0;i--){
if(arr1[i]>=arr2[i]){
arr1[i]=arr1[i]-arr2[i];
}
else{
if(i==0){
arr1[i]=arr1[i]-arr2[i];
if(arr1[i]<0)
{
arr1[i+1]=arr1[i]*10+arr1[i+1];
arr1[i]=0;
}
}
else{
arr1[i-1]--;
arr1[i]+=10;
arr1[i]=arr1[i]-arr2[i];
}
}
}
return arr1;
}
int main(){
char str1[100000],str2[100000];
scanf("%s%s",str1,str2);
int cnt1=strlen(str1),cnt2=strlen(str2);
int arr1[100000]={0},arr2[100000]={0};
int i;
int maxlen=cnt1>cnt2?cnt1:cnt2;
int j;
j=cnt1-1;
for(i=maxlen-1;;i--){
arr1[i]=str1[j]-'0';
j--;
if(j==-1){
break;
}
}
j=cnt2-1;
for(i=maxlen-1;;i--){
arr2[i]=str2[j]-'0';
j--;
if(j==-1){
break;
}
}
int flag=0;
int *ret;
if(cnt1>cnt2||(cnt1==cnt2&&arr1[0]>=arr2[0])){
flag=1;
ret=subFunc(arr1,arr2,maxlen);
}else{
ret=subFunc(arr2,arr1,maxlen);
}
i=0;
while(ret[i]==0&&i<maxlen-1){
i++;
}
if(flag==0){
printf("-");
}
for(j=i;j<maxlen;j++){
printf("%d",ret[j]);
}
return 0;
}