题目

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

有人提供思路说转成int型再进行运算,但int无法处理超大数据
以下代码纯字符串指针操作:

代码

执行用时: 4 ms, 在Add Binary的C提交中击败了57.09% 的用户

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
char* addBinary(char* a, char* b)
{char *c = NULL;//字符串指针,malloc内存int size_a = strlen(a);int size_b = strlen(b);int size_max = size_a > size_b ? size_a : size_b;int size_min = size_a < size_b ? size_a : size_b;int i;int j;char *a_ptr;char *b_ptr;char *c_ptr;int flag=0;//flag用来标记进位c = (char *)malloc(sizeof(char) * size_max + 2*sizeof(char));//动态内存*(c + size_max) = 0;//给c的最后两个字节赋结束符\0(一个用来接让字符串边长的进位,一个用来存放结束符)*(c + size_max+1) = 0;a_ptr = a + size_a - 1;//a_ptr指向a最后一个元素b_ptr = b + size_b - 1;//b_ptr指向b最后一个元素c_ptr = c + size_max - 1;//c_ptr指向c最后一个元素printf("*a_ptr=%c\n", *a_ptr);printf("*b_ptr=%c\n", *b_ptr);//对齐输出if (size_a < size_b){for (i = 0; i < abs(size_a - size_b); i++){printf(" ");}puts(a);puts(b);}else{puts(a);for (i = 0; i < abs(size_a - size_b); i++){printf(" ");}puts(b);}//复制较长字符串,便于让差值保持原状if (size_a > size_b){for (i = 0; i < size_a; i++){*(c + i) = *(a + i);}}else{for (i = 0; i < size_b; i++){*(c + i) = *(b + i);}}
//相加for (i = 0; i < size_min; i++){*c_ptr = *a_ptr + *b_ptr;a_ptr--;b_ptr--;c_ptr--;}c_ptr = c + size_max - 1;//指针归位//去掉字符导致的ascii重复运算for (i = 0; i < size_min; i++){*c_ptr = *c_ptr -48;c_ptr--;}c_ptr = c + size_max - 1;//指针归位//进位flag = 0;//注意flag是intfor (i = 0; i < size_max; i++){*c_ptr = *c_ptr + flag;if (*c_ptr == '3'){flag = 1;*c_ptr = '1';c_ptr--;}else if (*c_ptr == '2'){flag = 1;*c_ptr = '0';c_ptr--;}else if (*c_ptr == '1'){flag = 0;*c_ptr = '1';c_ptr--;}else if (*c_ptr == '0'){flag = 0;*c_ptr = '0';c_ptr--;}}//如果循环结束后flag=1,说明还有进位,应在最前面添加1if (flag == 1){c_ptr = c + size_max;//指针指向最后一个字节for (i = 0; i < size_max; i++){*c_ptr = *(c_ptr - 1);//后移一位c_ptr--;}*(c_ptr + 0) = '1';}return c;
}
int main()
{char *c;c=addBinary("1010", "1011");printf("结果:\n");puts(c);system("pause");
}

leetcode 67. 二进制求和(C语言)相关推荐

  1. LeetCode 67. 二进制求和

    1. 题目 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1:输入: a = "11", b = "1" ...

  2. Leetcode 67. 二进制求和 (每日一题 20210826)

    给你两个二进制字符串,返回它们的和(用二进制表示).输入为 非空 字符串且只包含数字 1 和 0.示例 1:输入: a = "11", b = "1" 输出: ...

  3. LeetCode:二进制求和【67】

    LeetCode:二进制求和[67] 题目描述 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11" ...

  4. 67. 二进制求和(转换法)

    二进制求和(C, Python实现) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python实现 1. 题目描述 难度:简单 2. 题目分析 转换法(Python) 转换法是最容易想到的 ...

  5. LeetCode 题 - 67. 二进制求和 python实现

    题目 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" ...

  6. LeetCode:67. 二进制求和(python、c++)

    题目描述 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1&qu ...

  7. LeetCode 力扣 67. 二进制求和

    题目描述(简单难度) 两个二进制数相加,返回结果,要注意到字符串的最低位代表着数字的最高位.例如 "100" 最高位(十进制中的百位的位置)是 1,但是对应的字符串的下标是 0. ...

  8. 学渣的刷题之旅 leetcode刷题 67.二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 输入: a = "11", b = "1" 输出: " ...

  9. 文巾解题 67. 二进制求和

    1 题目描述 2 解题思路 2.1 整数相加过渡 将A,B转化为整数(使用迭代实现),然后将A+B转换成二进制的字符串 返回的内容从第二个下标开始,是为了剔除bin()函数返回的'0b'这两个字符串 ...

最新文章

  1. 关于java几种输出的区别
  2. C#中'??'符的使用
  3. 在Kubernetes上使用Prometheus Operator监视应用程序
  4. displaytag 相关
  5. Android Images
  6. 利用Telerik Fiddler 进行手机抓包!
  7. C语言课后习题(58)
  8. 增值税发票的种类_以及税率---财务知识工作笔记001
  9. Eclipse — 导包异常总结《I》
  10. Atitit 类库冲突解决方案  httpclient-4.5.2.jar
  11. 快速构建Windows 8风格应用25-数据绑定
  12. cpu与计算机其他的通信,PC与CPU224 通讯
  13. 2021-2027全球与中国创建和销售在线课程平台市场现状及未来发展趋势
  14. 微软账号登陆不上_微软待办(todo)如何跟Outlook任务同步?
  15. 时钟倒计时html,jQuery倒计时/计时器/时间插件
  16. windows查看wifi密码的多种方式
  17. 这才是最简单的php+mysql+apache+bluefish+mysqlworkbench配置教程
  18. 学习Python一定要吃透这68个内置函数,强烈建议收藏(文末附本周送书和抽奖)...
  19. C# DLL资源文件打包(图片、JS、CSS)[WebResource]
  20. 测设面试题笔试题总结

热门文章

  1. TensorFlow2-高层API接口Keras
  2. java比较两个对象重写,不重写equals进行两个对象间的深度比较
  3. JMP指令转换公式推导
  4. C++虚函数和纯虚函数的区别
  5. Android平台Chromium net中的代理配置信息获取
  6. 字符串匹配算法(三):KMP(KnuthMorrisPratt)算法
  7. scrapy使用cookie的三种方式
  8. 第50讲:Scrapy 部署不用愁,Scrapyd 的原理和使用
  9. 阿里面试官问你准备在阿里待几年, 怎么回答?
  10. 恐怖如斯,阿里P9总结的这份Java八股文,已经帮近百人拿到offer了