scanf数组两数相加
时间: 2023-11-02 13:07:51 浏览: 60
scanf函数是C语言中的一个输入函数,可以从标准输入设备(如键盘)读取数据。而数组是一种存储多个相同类型数据的数据结构。将scanf和数组结合起来,可以实现输入多个数据并存储到数组中,然后对数组进行操作。
下面是一个scanf数组两数相加的示例代码:
```
#include <stdio.h>
int main()
{
int arr[2];
int sum = 0;
printf("请输入两个整数:\n");
scanf("%d %d", &arr[0], &arr[1]);
sum = arr[0] + arr[1];
printf("两数之和为:%d\n", sum);
return 0;
}
```
在这个示例代码中,首先定义了一个长度为2的整型数组arr和一个整型变量sum。然后通过scanf函数从标准输入设备中读取两个整数,并将它们存储到数组arr中。最后将数组中的两个数相加,结果存储到sum变量中,并输出到屏幕上。
相关问题
还有两数相减的代码
将两个大整数的减法转化为加法,即 a - b = a + (-b),其中 -b 为 b 的每一位取 10 之后再减去原数。下面是完整的代码实现:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 数组最大长度
int a[MAX_LEN], b[MAX_LEN], c[MAX_LEN]; // 定义三个数组,a、b为输入的两个大整数,c为它们的差
void add(int a[], int b[], int c[]) // 定义一个函数,实现两个大整数相加
{
int carry = 0; // 进位
for (int i = 0; i < MAX_LEN; i++)
{
int sum = a[i] + b[i] + carry; // 计算第i位的和
c[i] = sum % 10; // 取个位数,存储在c数组中
carry = sum / 10; // 计算新的进位
}
c[MAX_LEN] = carry; // 如果最高位有进位,将其保存在a的最高位
}
int main()
{
char str_a[MAX_LEN], str_b[MAX_LEN]; // 定义两个字符串,用于输入两个大整数
scanf("%s %s", str_a, str_b); // 输入两个大整数
int len_a = strlen(str_a), len_b = strlen(str_b); // 计算两个大整数的长度
for (int i = 0; i < len_a; i++)
a[i] = str_a[len_a - 1 - i] - '0'; // 将a字符串转化为a数组,从低到高存储
for (int i = 0; i < len_b; i++)
b[i] = str_b[len_b - 1 - i] - '0'; // 将b字符串转化为b数组,从低到高存储
int sign = 1; // 符号标记,1为正数,-1为负数
if (len_a < len_b || (len_a == len_b && strcmp(str_a, str_b) < 0)) // 判断减数和被减数的大小关系
{
sign = -1; // 如果b大于a,则差为负数
int *temp = a; // 交换a和b
a = b;
b = temp;
int temp_len = len_a; // 交换a和b的长度
len_a = len_b;
len_b = temp_len;
}
for (int i = 0; i < len_b; i++)
b[i] = (b[i] + 10) % 10; // 将b的每一位取10之后再减去原数,得到-b的每一位
add(a, b, c); // 调用add函数,计算a和-b的和
int len_c = MAX_LEN;
while (len_c > 1 && c[len_c - 1] == 0) // 去掉c数组前导0
len_c--;
if (sign == -1)
printf("a - b = -"); // 如果差为负数,输出负号
else
printf("a - b = ");
for (int i = len_c - 1; i >= 0; i--)
printf("%d", c[i]); // 输出a和-b的和,从高到低输出即可
printf("\n");
return 0;
}
```
这段代码实现了两个大整数的减法,首先将输入的两个大整数转化为数组,然后判断减数和被减数的大小关系,如果b大于a,则差为负数,需要在最前面输出一个负号。接着,将b的每一位取10之后再减去原数,得到-b的每一位,然后调用add函数计算a和-b的和。最后,输出a和-b的和,从高到低输出即可。
c语言实现两个长整数相加
以下是C语言实现两个长整数相加的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义最大长度
char num1[MAX_LEN], num2[MAX_LEN], sum[MAX_LEN]; // 定义两个长整数及它们的和
void reverse(char s[]) { // 反转字符串
int len = strlen(s);
for (int i = 0; i < len / 2; i++) {
char tmp = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = tmp;
}
}
int main() {
scanf("%s%s", num1, num2); // 输入两个长整数
int len1 = strlen(num1), len2 = strlen(num2);
// 将两个长整数反转,方便从个位开始相加
reverse(num1);
reverse(num2);
int carry = 0; // 进位
int i, j;
for (i = 0, j = 0; i < len1 || j < len2 || carry; i++, j++) {
int a = i < len1 ? num1[i] - '0' : 0; // 如果已经加完了,就当成0
int b = j < len2 ? num2[j] - '0' : 0; // 如果已经加完了,就当成0
int s = a + b + carry; // 两个数相加再加上进位
sum[i] = s % 10 + '0'; // 取个位
carry = s / 10; // 取十位,作为下一次的进位
}
reverse(sum); // 将结果反转回来
printf("%s\n", sum); // 输出结果
return 0;
}
```
代码思路:
1. 定义三个字符数组,分别存储两个长整数及它们的和。
2. 输入两个长整数,计算它们的长度。
3. 将两个长整数反转,方便从个位开始相加。
4. 定义一个进位变量,初始值为0,从个位开始相加两个长整数,并加上进位。
5. 将相加的结果的个位存储到和中,并更新进位变量。
6. 循环执行步骤4和步骤5,直到两个长整数的所有位都相加完毕并且进位为0。
7. 将结果反转回来,输出和。