两个数相加的C语言代码
时间: 2024-05-06 07:17:06 浏览: 92
下面是两个整数相加的C语言代码示例:
```c
#include <stdio.h>
int main() {
int num1, num2, sum;
printf("请输入两个整数:\n");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("它们的和是:%d\n", sum);
return 0;
}
```
在这个程序中,我们首先声明了三个变量 `num1`、`num2` 和 `sum`,分别用来存储两个输入的整数和它们的和。然后,我们通过 `scanf` 函数从用户那里获取这两个整数的值。接下来,我们将这两个整数相加,并将结果存储在变量 `sum` 中。最后,我们使用 `printf` 函数将结果输出到控制台中。
相关问题
力扣 两数相加 C语言 题解
题目描述:
给出两个非空链表来表示两个非负整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解题思路:
题目中要求我们按照逆序的方式存储两个非负整数,也就是说链表的头节点表示该数的个位,第二个节点表示该数的十位,以此类推。
因此,我们可以从两个链表的头节点开始,对应位相加,并记录进位,将结果添加到新的链表中。如果有进位,需要在下一位相加时加上进位。
需要注意的是,当两个链表的长度不一致时,可以将较短的链表的缺失位看作是 0。
最后,如果最高位有进位,还需要在新链表的最高位添加一个值为 1 的节点。
C 语言代码实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head = NULL, *tail = NULL;
int carry = 0;
while (l1 || l2) {
int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;
int sum = n1 + n2 + carry;
if (!head) {
head = tail = malloc(sizeof(struct ListNode));
tail->val = sum % 10;
tail->next = NULL;
} else {
tail->next = malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = sum % 10;
tail->next = NULL;
}
carry = sum / 10;
if (l1) l1 = l1->next;
if (l2) l2 = l2->next;
}
if (carry > 0) {
tail->next = malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = carry;
tail->next = NULL;
}
return head;
}
数据结构之多项式相加C语言代码
在C语言中,计算两个多项式的相加并不直接像数学那样直观,因为计算机中的数据通常是以数值形式存储的,而不是作为字符串。我们通常需要先将多项式转换成数组或链表,然后逐项相加。下面是一个简单的例子,假设多项式是用整数表示的系数和对应变量次数的数组:
```c
#include <stdio.h>
// 定义多项式节点结构体
typedef struct {
int coefficient; // 系数
int degree; // 次数
} PolynomialTerm;
// 函数用于合并两个多项式,并返回结果多项式的首节点
PolynomialTerm* addPolynomials(PolynomialTerm *poly1, PolynomialTerm *poly2, int maxDegree) {
PolynomialTerm *result = (maxDegree == 0) ? NULL : (PolynomialTerm*)malloc(sizeof(PolynomialTerm)); // 如果只有一个多项式,直接复制
PolynomialTerm *temp = result;
for (int i = 0; i <= maxDegree; ++i) {
temp->coefficient += poly1[i].coefficient + poly2[i].coefficient; // 累加系数
if (temp->degree >= i)
temp->degree = i; // 更新最高次幂
if (!result || temp->coefficient > 0) { // 只有当结果不存在或当前项非零时才添加新项
temp = (PolynomialTerm*)realloc(temp, sizeof(PolynomialTerm) * (temp->degree + 1));
temp->degree = i;
}
}
return result;
}
// 示例
int main() {
PolynomialTerm a[] = {1, 2, 3};
PolynomialTerm b[] = {4, 5, 6};
int n1 = sizeof(a) / sizeof(a[0]);
int n2 = sizeof(b) / sizeof(b[0]);
PolynomialTerm *sum = addPolynomials(a, b, MAX(n1, n2));
// 打印结果多项式
for (PolynomialTerm *term = sum; term != NULL; term = term->next) {
printf("%d*x^%d + ", term->coefficient, term->degree);
}
printf("0\n");
free(sum); // 不要忘记释放内存
return 0;
}
```
在这个示例中,`addPolynomials`函数会合并两个多项式到一个新的数组中,如果某个次数超过了最大度,那么只会保留这个最大的次数。请注意,这只是一个简化版本,实际应用中可能还需要处理更复杂的情况,比如合并两个长度不同的多项式。
阅读全文