当前位置:首页 > 实用技巧 >

c语言输入两个数字并求和(c语言怎么将两个数字相加求和)

来源:原点资讯(www.yd166.com)时间:2024-01-27 00:23:34作者:YD166手机阅读>>

学习工控知识,就来工控小新

农历十一月二十六日 2024/1/ 7

往期推荐

2024年1月5日,每日花费一分钟练习C语言

2024年1月6日,每日花费一分钟练习C语言

c语言输入两个数字并求和,c语言怎么将两个数字相加求和(1)

每日一练

/ Daily Exercises

C语言题目:二进制求和,给你两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字1和0

题目分析

题目要求我们给出两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。这意味着我们需要考虑以下几个方面:

如何读取和存储二进制字符串?

如何对齐两个二进制字符串,使得他们的长度相同?

如何进行二进制加法运算,包括进位和溢出的处理?

如何输出二进制字符串的和?

接下来,我们来看看如何用C语言实现这个题目的解决方案。我们可以使用以下的步骤:

定义一个常量MAX_LEN,表示二进制字符串的最大长度。我们可以根据题目的要求或者实际情况来设置这个值。为了简单起见,我们假设这个值为32。

定义一个函数binary_sum,接受两个二进制字符串作为参数,返回一个二进制字符串作为结果。这个函数的原型如下:

char *binary_sum(char *a, char *b);

在函数内部,我们需要定义一些变量,如两个二进制字符串的长度,一个进位标志,一个结果字符串,以及一个循环变量。我们可以使用以下的代码:

int len_a = strlen(a); // 获取第一个二进制字符串的长度 int len_b = strlen(b); // 获取第二个二进制字符串的长度 int carry = 0; // 初始化进位标志为0 char *result = (char *)malloc(MAX_LEN 1); // 分配一个结果字符串的空间,长度为MAX_LEN 1,多出的一位用于存储'\0'字符 int i; // 定义一个循环变量

- 接下来,我们需要对齐两个二进制字符串,使得他们的长度相同。我们可以从右往左遍历两个字符串,如果某个字符串已经遍历完,就用0来补齐。我们可以使用以下的代码:

for (i = MAX_LEN - 1; i >= 0; i--) { // 从右往左遍历结果字符串的每一位 int bit_a = (len_a > 0) ? a[--len_a] - '0' : 0; // 获取第一个二进制字符串的当前位,如果已经遍历完,就用0代替,同时将其转换为整数 int bit_b = (len_b > 0) ? b[--len_b] - '0' : 0; // 获取第二个二进制字符串的当前位,如果已经遍历完,就用0代替,同时将其转换为整数

- 然后,我们需要进行二进制加法运算,包括进位和溢出的处理。我们可以使用以下的公式来计算结果字符串的每一位:

result[i] = (bit_a bit_b carry) % 2 '0'; // 计算当前位的值,将其转换为字符 carry = (bit_a bit_b carry) / 2; // 计算进位的值

- 最后,我们需要输出二进制字符串的和。我们可以使用以下的代码

result[MAX_LEN] = '\0'; // 在结果字符串的末尾添加'\0'字符,表示字符串的结束 return result; // 返回结果字符串

程序展示

根据上面的分析,我们可以用C语言来实现这个算法。

#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 32 // 定义二进制字符串的最大长度 char *binary_sum(char *a, char *b); // 声明二进制求和函数 int main() { char *a = (char *)malloc(MAX_LEN 1); // 分配一个空间,用于存储第一个二进制字符串 char *b = (char *)malloc(MAX_LEN 1); // 分配一个空间,用于存储第二个二进制字符串 printf("请输入第一个二进制字符串:\n"); // 提示用户输入第一个二进制字符串 scanf("%s", a); // 读取用户的输入 printf("请输入第二个二进制字符串:\n"); // 提示用户输入第二个二进制字符串 scanf("%s", b); // 读取用户的输入 if (strlen(a) == 0 || strlen(b) == 0) { // 检查输入是否为空字符串 printf("输入不能为空字符串!\n"); // 输出错误信息 return 1; // 结束程序 } size_t k; // 定义一个循环变量,类型为size_t for (k = 0; k < strlen(a); k ) { // 检查第一个二进制字符串是否只包含数字1和0 if (a[k] != '0' && a[k] != '1') { printf("输入只能包含数字1和0!\n"); // 输出错误信息 return 1; // 结束程序 } } for (k = 0; k < strlen(b); k ) { // 检查第二个二进制字符串是否只包含数字1和0 if (b[k] != '0' && b[k] != '1') { printf("输入只能包含数字1和0!\n"); // 输出错误信息 return 1; // 结束程序 } } char *c = binary_sum(a, b); // 调用二进制求和函数,得到结果字符串 //printf("%s %s = %s\n", a, b, c); // 输出结果 int j = 0; // 定义一个变量,用于记录第一个不为0的位置 while (c[j] == '0' && j < MAX_LEN - 1) { // 循环找到第一个不为0的位置,如果全为0,就保留最后一位 j ; } printf("%s %s = %s\n", a, b, c j); // 从第一个不为0的位置开始打印结果 free(c); // 释放结果字符串的空间 return 0; // 结束程序 } char *binary_sum(char *a, char *b) { int len_a = strlen(a); // 获取第一个二进制字符串的长度 int len_b = strlen(b); // 获取第二个二进制字符串的长度 int carry = 0; // 初始化进位标志为0 char *result = (char *)malloc(MAX_LEN 1); // 分配一个结果字符串的空间,长度为MAX_LEN 1,多出的一位用于存储'\0'字符 int i; // 定义一个循环变量 for (i = MAX_LEN - 1; i >= 0; i--) { // 从右往左遍历结果字符串的每一位 int bit_a = (len_a > 0) ? a[--len_a] - '0' : 0; // 获取第一个二进制字符串的当前位,如果已经遍历完,就用0代替,同时将其转换为整数 int bit_b = (len_b > 0) ? b[--len_b] - '0' : 0; // 获取第二个二进制字符串的当前位,如果已经遍历完,就用0代替,同时将其转换为整数 result[i] = (bit_a bit_b carry) % 2 '0'; // 计算当前位的值,将其转换为字符 carry = (bit_a bit_b carry) / 2; // 计算进位的值 } result[MAX_LEN] = '\0'; // 在结果字符串的末尾添加'\0'字符,表示字符串的结束 return result; // 返回结果字符串 }

程序测试

运行结果如下:

c语言输入两个数字并求和,c语言怎么将两个数字相加求和(2)

- 这个结果与我们预期的一致,说明我们的程序是正确的。

源代码获取

#软件下载通道#

我用夸克网盘分享了「20240107」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。

链接:https://pan.quark.cn/s/b50e6626ff24

(链接和提取码建议复制粘贴,手动输入容易出现错误)

#支持一下#

分享整理,测试发布不易 如果您方便的话可以帮忙点一下↓↓

谢谢大家!

下期题目

给定两个整数 n和k,返回1...n 中所有可能的个数的组合。

示例:

输入:n=4,k=2

输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]

点赞加关注,学习不迷路

微信公众号|工控小新

EPLAN电气绘图、TIA博图基础 、CAD、C语言教学、单片机基础、三菱PLC ... 每日持续更新中



,

栏目热文

c上下数字是相同的(c语言数字顺序调换)

c上下数字是相同的(c语言数字顺序调换)

第5课时 数的顺序【教学目标】1.掌握100以内数的顺序,会运用100以内数的顺序解决问题。2.进一步感受100以内数的...

2024-01-27 00:46:38查看全文 >>

出口产品唛头的标准格式图(国际贸易中唛头的标准格式)

出口产品唛头的标准格式图(国际贸易中唛头的标准格式)

唛头是一种用于标识货物来源、性质和数量的标志,通常用于物流运输和贸易活动中。唛头可以是文字、符号或图案,其目的是为了方便...

2024-01-27 00:17:52查看全文 >>

出口商品唛头的标准格式图(外贸唛头格式和范例)

出口商品唛头的标准格式图(外贸唛头格式和范例)

外贸出口过程中,唛头显得尤为重要,唛头用的好很容易被有关人员识别,大大减少了货物发错的几率;唛头使用不正确,也会对工作人...

2024-01-27 00:22:39查看全文 >>

出口货物唛头怎么贴(出口外箱唛头怎么打印)

出口货物唛头怎么贴(出口外箱唛头怎么打印)

记得之前给客户出口一个上海到釜山的整柜,TA就由于没有对产品的包装贴“MADE IN CHINA”字样从而导致货物被退运...

2024-01-27 00:39:47查看全文 >>

国际贸易标准唛头格式(外贸唛头格式颜色要怎么写)

国际贸易标准唛头格式(外贸唛头格式颜色要怎么写)

唛头的功能是方便工作人员在每次运输中识别和区分货物。同时,它显示货物的重量、尺寸、性质和装运中的注意事项等。工作人员必须...

2024-01-27 00:35:54查看全文 >>

c语言计算整数各位数字之和(c语言计算任意位整数各位数字之和)

c语言计算整数各位数字之和(c语言计算任意位整数各位数字之和)

题目描述求输入的一个正整数的各位数字之和输入一行一个整数输出一个整数样例输入 Copy2147483646样例输出 Co...

2024-01-27 00:19:27查看全文 >>

c语言让一列数字相加怎么写(c语言怎么算三个数相加)

c语言让一列数字相加怎么写(c语言怎么算三个数相加)

我们都知道数列求和,数列求和就是给定一组数列,然后求和。但今天这道题目呢,“数列求和-加强版”难度也提升了一个档次,我一...

2024-01-27 00:26:47查看全文 >>

cf手游葵死亡拍照(cf手游角色葵怎么拍照)

cf手游葵死亡拍照(cf手游角色葵怎么拍照)

葵妹妹,是穿越火线中一款非常漂亮气的角色,其最特别的技能莫过于“表情大师”,按下N键后可使用鼓掌,挑衅,自拍等多达7种表...

2024-01-27 00:58:40查看全文 >>

cf无尽挑战符文最佳搭配(cf无尽挑战符文搭配在哪儿)

cf无尽挑战符文最佳搭配(cf无尽挑战符文搭配在哪儿)

今天来探讨如何对付无尽。在无尽中,有四种符文可供选择:紫色、红色、绿色和蓝色。紫色符文的最佳选择是四个boss,而我选择...

2024-01-27 00:34:57查看全文 >>

文档排行