#c语言
#问题描述
输入两个整数实现整数减法A-B
要求:分三种情况:
1.减数长度大于被减数
交换减数与被减数,输出负号,方便减
2.减数长度等于被减数(分三种情况)
a.减数大于被减数,类似1情况1
b.减数等于被减数,两数相等,直接输出0,完成。
c.减数小于被减数
3.减数长度小于被减数
#Input Description
输入两个整数
#Output Description
输出结果
Sample Input
55678899000 34556778
Sample Output
55644342222
求球求
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
下面是代码实现:
#include <stdio.h>
#include <string.h>
#define N 1000
int cmp(char str1[], char str2[]) { //比较两个字符串的大小
int len1 = strlen(str1);
int len2 = strlen(str2);
if(len1 > len2) return 1;
else if(len1 < len2) return -1;
else {
int i;
for(i = 0; i < len1; i++) {
if(str1[i] > str2[i]) return 1;
else if(str1[i] < str2[i]) return -1;
}
return 0; //两个字符串相等
}
}
void swap(char str1[], char str2[]) { //交换两个字符串
char tmp[N];
strncpy(tmp, str1, N);
strncpy(str1, str2, N);
strncpy(str2, tmp, N);
}
void sub(char str1[], char str2[]) { //两个字符串相减
char res[N];
int len1 = strlen(str1);
int len2 = strlen(str2);
int borrow = 0; //进位
int i;
for(i = 0; i < len1; i++) {
int a = str1[len1 - i - 1] - '0';
int b = i < len2 ? str2[len2 - i - 1] - '0' : 0;
int tmp = a - b - borrow;
if(tmp < 0) {
tmp += 10;
borrow = 1;
} else {
borrow = 0;
}
res[len1 - i - 1] = tmp + '0';
}
printf("%s\n", res);
}
int main() {
char str1[N], str2[N];
scanf("%s %s", str1, str2);
int flag = cmp(str1, str2);
if(flag < 0) { //当减数长度小于被减数,交换两个字符串
printf("-");
swap(str1, str2);
} else if(flag == 0) { //当两个字符串相等,输出0
printf("0\n");
return 0;
}
sub(str1, str2);
return 0;
}
思路说明:
1.先比较两个整数的大小,如果减数长度小于被减数,交换两个字符串,并输出负号。
2.如果两个整数相等,直接输出0。
3.对两个字符串进行相减,然后输出结果。
在相减时,我们可以从低位到高位遍历字符串,分别将它们对应的数字相减并减去上一位的借位,然后将结果存储在一个字符数组中,以便输出。需要注意的是,如果对应的数字小于上一位的借位,则需要向上一位借位,同时减数需要加上一个10来进行计算。
例如:
55678899000 - 34556778
先比较两个数字的大小,可知减数长度大于被减数,需将两个数字交换并输出负号:
34556778 - 55678899000
从低位到高位遍历字符串,相减得到结果:
8 - 0 = 8
7 - 0 = 7
7 - 9 - 1 = -3,需要向前一位借位
6 - 8 - 1 = -3,需要向前一位借位
5 - 7 - 1 = -3,需要向前一位借位
5 - 6 - 1 = -2,需要向前一位借位
4 - 5 - 1 = -2,需要向前一位借位
3 - 5 - 1 = -3,需要向前一位借位
5 - 5 - 0 = 0
5 - 3 - 0 = 2
6 - 4 - 0 = 2
5 - 3 - 0 = 2
最终结果为:
-55644342222
如果我的回答解决了您的问题,请采纳!