题目描述 :
编写程序接受两个任意大的整数,返回两个整数之差, (提示:大整数用字符串表示)。 输出格式:如果结果为正,在结果前用"+“表示,如果为负数则加上”-"; 如果结果的位数小于输入整数的位数,则在结果前面补零直到和位数最大的输入数位数一致; 如果两个数相等直接输出0 例如输入: 22345678900 12345678900 输出: +10000000000 输入: 100 1010 输出: -0910 输入: 12345 12345 输出: 0
实现:
#include <iostream>
#include<cstdio>
#include <cstdlib>
#include<cstring>
using namespace std
;
void CharReverselInt(char* source1
, char* source2
, int* num1
, int* num2
);
int compare(char* A
, char* B
);
void My_Poor(int* , int*,int);
int main()
{
char A
[100], B
[100];
scanf("%s %s", A
, B
);
int len1
= strlen(A
), len2
= strlen(B
);
int len
= len1
> len2
? len1
: len2
;
int *num1
= new int[len
],*num2
= new int[len
];
CharReverselInt(A
, B
, num1
, num2
);
int sign_tf
= compare(A
, B
);
if (sign_tf
== 0)
cout
<< 0;
else if (sign_tf
> 0)
{
cout
<< "+";
My_Poor(num1
, num2
,len
);
}
else if (sign_tf
< 0)
{
cout
<< "-";
My_Poor(num2
, num1
,len
);
}
}
void CharReverselInt(char* source1
,char *source2
, int* num1
,int *num2
)
{
int len1
= strlen(source1
), len2
= strlen(source2
);
int len
= len1
> len2
? len1
: len2
;
for (int i
= 0; i
< len
; i
++)
{
num1
[i
] = i
< len1
? source1
[len1
- i
- 1] - '0' : 0;
}
for (int j
= 0; j
< len
; j
++)
{
num2
[j
] = j
< len2
? source2
[len2
- j
- 1] - '0' : 0;
}
}
int compare(char* A
, char* B
)
{
int len1
= strlen(A
), len2
= strlen(B
);
if (len1
> len2
)
return 1;
if (len1
< len2
)
return -1;
if (strcmp(A
, B
) == 0)
return 0;
else
{
for (int i
= 0; i
< len1
; i
++)
{
if (A
[i
] == B
[i
])
continue;
if (A
[i
] > B
[i
])
return 1;
if (A
[i
] < B
[i
])
return -1;
}
}
}
void My_Poor(int* num1
, int* num2
,int len
)
{
int* result
= new int[len
];
int flag
= 0;
for (int i
= 0; i
< len
; i
++)
{
result
[len
- 1 - i
] = (num1
[i
] - num2
[i
] - flag
+ 10 ) % 10;
flag
= (num1
[i
] - num2
[i
] - flag
>=0)?0:1;
}
for (int i
= 0; i
< len
; i
++)
cout
<< result
[i
];
}
转载请注明原文地址:https://blackberry.8miu.com/read-41022.html