用C语言编写输入两个整数实现整数减法A-B 要求:分三种情况: 1.减数长度大于被减数 交换减数与被减数,输出负号,方便减 2.减数长度等于被减数(分三种情况) a.减数大于被减数,类似1情况1 b.减数等于被减数,两数相等,直接输出0,完成。 c.减数小于被减数 3.减数长度小于被减数输入两个整数输出结果
时间: 2024-03-12 09:44:00 浏览: 80
好的,以下是用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语言编写输入两个整数实现整数减法A-B 要求:分三种情况: 1.减数长度大于被减数 交换减数与被减数,输出负号,方便减 2.减数长度等于被减数(分三种情况) a.减数大于被减数,类似1情况1 b.减数等于被减数,两数相等,直接输出0,完成。 c.减数小于被减数 3.减数长度小于被减数输入两个整数输出结果大整数减法
好的,以下是C语言实现输入两个整数实现整数减法A-B的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义最大长度
int main()
{
char a[MAX_LEN + 1], b[MAX_LEN + 1], ans[MAX_LEN + 1]; // 定义字符串数组
int lena, lenb, lens, flag = 0; // lena为a的长度,lenb为b的长度,lens为结果的长度,flag为标志位
// 输入两个整数
printf("请输入被减数A:");
scanf("%s", a);
printf("请输入减数B:");
scanf("%s", b);
lena = strlen(a);
lenb = strlen(b);
// 分三种情况
if (lena < lenb || (lena == lenb && strcmp(a, b) < 0)) {
char temp[MAX_LEN + 1];
strcpy(temp, a);
strcpy(a, b);
strcpy(b, temp);
flag = 1;
}
lens = lena > lenb ? lena : lenb;
int i = lena - 1, j = lenb - 1, k = lens - 1;
int borrow = 0; // 定义借位变量
while (i >= 0 || j >= 0) {
int x = i >= 0 ? a[i] - '0' : 0;
int y = j >= 0 ? b[j] - '0' : 0;
int z = x - y - borrow;
if (z < 0) {
z += 10;
borrow = 1;
} else {
borrow = 0;
}
ans[k--] = z + '0';
i--;
j--;
}
// 去除前导零
while (ans[lens - 1] == '0' && lens > 1) {
lens--;
}
// 输出结果
if (flag) {
printf("-");
}
for (i = 0; i < lens; i++) {
printf("%c", ans[i]);
}
printf("\n");
return 0;
}
```
该代码可以实现输入两个整数进行减法运算,并且可以处理减数长度大于被减数、减数长度等于被减数、减数长度小于被减数这三种情况。
对于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,则不能输出负号。
此代码可以通过超长整数加减法的测试用例。
阅读全文