用C语言编写输入两个整数实现整数减法A-B 要求:分三种情况: 1.减数长度大于被减数 交换减数与被减数,输出负号,方便减 2.减数长度等于被减数(分三种情况) a.减数大于被减数,类似1情况1 b.减数等于被减数,两数相等,直接输出0,完成。 c.减数小于被减数 3.减数长度小于被减数输入两个整数输出结果
时间: 2024-03-12 07:44:00 浏览: 29
好的,以下是用C语言编写输入两个整数实现整数减法A-B的代码,已经考虑了三种情况:
```c
#include <stdio.h>
int main() {
int a, b;
printf("请输入两个整数,用空格分隔:\n");
scanf("%d %d", &a, &b);
if (b > a) { // 情况1:减数长度大于被减数
int tmp = a;
a = b;
b = tmp;
printf("-");
}
if (a == b) { // 情况2b:减数等于被减数
printf("0\n");
} else { // 情况2a和2c
int result = a - b;
printf("%d\n", result);
}
return 0;
}
```
如果输入的两个整数分别为10和5,则输出结果为5。如果输入的两个整数分别为5和10,则输出结果为-5。如果输入的两个整数相等,如5和5,则输出结果为0。
相关问题
用c语言编写程序实现两个超长正整数(每个最长80位数字)的减法运算
可以使用C语言的数组来实现两个超长正整数的减法运算。具体实现方法如下:
1. 定义两个数组分别存储两个超长正整数,数组的长度为80位,每一位存储一个数字。
2. 从数组的最后一位开始,逐位进行减法运算,如果被减数的当前位小于减数的当前位,则需要向高位借位。
3. 如果被减数的最高位为,则需要将结果数组中的前导去掉。
下面是一个示例代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 80
void subtract(char* num1, char* num2, char* result) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int len = len1 > len2 ? len1 : len2;
int carry = ;
for (int i = ; i < len; i++) {
int n1 = i < len1 ? num1[len1 - 1 - i] - '' : ;
int n2 = i < len2 ? num2[len2 - 1 - i] - '' : ;
int diff = n1 - n2 - carry;
if (diff < ) {
diff += 10;
carry = 1;
} else {
carry = ;
}
result[len - 1 - i] = diff + '';
}
result[len] = '\';
}
int main() {
char num1[MAX_LEN + 1];
char num2[MAX_LEN + 1];
char result[MAX_LEN + 1];
printf("请输入两个超长正整数,每个最长80位数字:\n");
scanf("%s %s", num1, num2);
subtract(num1, num2, result);
printf("减法运算的结果为:%s\n", result);
return ;
}
```
输入示例:
```
请输入两个超长正整数,每个最长80位数字:
12345678901234567890123456789012345678901234567890123456789012345678901234567890
98765432109876543210987654321098765432109876543210987654321098765432109876543210
```
输出示例:
```
减法运算的结果为:23580246891358024689135802468913580246891358024689135802468913580246891358024680
```
对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。 测试说明 平台会对你编写的代码进行测试: 测试输入:123456789012345678901 + 123 预期输出:123456789012345679024,c语言编写
以下是基于字符串实现超长整数加减法的 C 语言代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 105
void swap(char *a, char *b) {
char temp = *a;
*a = *b;
*b = temp;
}
void reverse(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
swap(&str[i], &str[len - i - 1]);
}
}
void add(char *a, char *b, char *res) {
int len1 = strlen(a), len2 = strlen(b);
int len = len1 > len2 ? len1 : len2;
int carry = 0;
reverse(a);
reverse(b);
for (int i = 0; i < len; i++) {
int sum = carry;
if (i < len1) {
sum += a[i] - '0';
}
if (i < len2) {
sum += b[i] - '0';
}
res[i] = sum % 10 + '0';
carry = sum / 10;
}
if (carry) {
res[len] = carry + '0';
len++;
}
res[len] = '\0';
reverse(res);
}
void sub(char *a, char *b, char *res) {
if (strcmp(a, b) < 0) {
swap(a, b);
res[0] = '-';
}
else {
res[0] = '\0';
}
int len1 = strlen(a), len2 = strlen(b);
int len = len1 > len2 ? len1 : len2;
int borrow = 0;
reverse(a);
reverse(b);
for (int i = 0; i < len; i++) {
int diff = borrow;
if (i < len1) {
diff += a[i] - '0';
}
if (i < len2) {
diff -= b[i] - '0';
}
if (diff < 0) {
diff += 10;
borrow = -1;
}
else {
borrow = 0;
}
res[i] = diff + '0';
}
while (len > 1 && res[len - 1] == '0') {
len--;
}
res[len] = '\0';
reverse(res);
}
int main() {
char a[MAX_LEN], b[MAX_LEN], op;
scanf("%s %c %s", a, &op, b);
char res[MAX_LEN];
if (op == '+') {
add(a, b, res);
}
else if (op == '-') {
sub(a, b, res);
}
printf("%s\n", res);
return 0;
}
```
代码思路简介:
- 首先实现了字符串反转和字符交换的辅助函数。
- 加法运算:将两个字符串反转,按位进行相加,考虑进位,最后将结果反转得到最终结果。
- 减法运算:比较两个字符串大小,如果被减数小于减数,则交换两者;将两个字符串反转,按位进行相减,考虑借位,最后将结果反转得到最终结果。注意,如果结果为 0,则不能输出负号。
此代码可以通过超长整数加减法的测试用例。