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

首页 > 实用技巧 > 作者:YD1662024-01-27 00:23:34

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

农历十一月二十六日 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 ... 每日持续更新中



栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.