• JSK-61 二进制加法【大数】


    二进制加法

    给定两个二进制数组成的字符串,计算他们的和。

    他们的和依然是字符串。

    例如:

    a = "11"

    b = "1"

    返回"100".

    注意:千万别想着将二进制转换成10进制,计算以后再转换成二进制。

    那样,在大数的时候,肯定溢出哦~

    格式:

    第一行输入两个长度不超过100的二进制字符串,中间以空格间隔开。

    接下来输出两个二进制数的和。

    样例输入

    1010 1011

    样例输出

    10101

    问题链接JSK-61 二进制加法

    问题描述:(略)

    问题分析

      大数加法问题,用数组模拟计算。

    程序说明:(略)

    参考链接:(略)

    题记:想不到好方法则或暴力或模拟。

    AC的C语言程序如下:

     1 /* JSK-61 二进制加法 */
     2 
     3 #include <stdio.h>
     4 #include <string.h>
     5 
     6 #define N 100
     7 char a[N + 1], b[N + 1], c[N + 2];
     8 
     9 int main()
    10 {
    11     while(~scanf("%s%s", a, b)) {
    12         int i = strlen(a) - 1, j = strlen(b) - 1, carry = 0, k = N;
    13         for(;;) {
    14             if(a[i] == '0' && b[j] == '0') {
    15                 c[k] = (carry ? '1' : '0');
    16                 carry = 0;
    17             } else if(a[i] == '1' && b[j] == '1') {
    18                 c[k] = (carry ? '1' : '0');
    19                 if(carry == 0)
    20                     carry = 1;
    21             } else
    22                 c[k] = (carry ? '0' : '1');
    23 
    24 
    25             k--; i--; j--;
    26             if(i < 0 && j < 0) break;
    27             if(i < 0) {i = 0; a[i] = '0';}
    28             if(j < 0) {j = 0; b[j] = '0';}
    29         }
    30         // 最后的进位处理
    31         c[k] = carry + '0';
    32         // 去掉高位的0
    33         while(c[k] == '0' && k < N)
    34             k++;
    35 
    36         // 输出结果
    37         c[N + 1] = '';
    38         printf("%s
    ", &c[k]);
    39     }
    40 
    41     return 0;
    42 }

    WA的C语言程序如下:

     1 /* JSK-61 二进制加法 */
     2 
     3 #include <stdio.h>
     4 #include <string.h>
     5 
     6 #define BASE 2
     7 #define N 100
     8 char a[N + 1], b[N + 1], c[N + 2];
     9 
    10 int main(void)
    11 {
    12     // 读入2个数放入数组a[]和b[]
    13     while(~scanf("%s%s", a, b)) {
    14         int i = strlen(a) - 1, j = strlen(b) - 1, k = N;
    15         char carry = 0;
    16         // 2个数相加
    17         for(; ;) {
    18             char t = a[i--] - '0' + b[j--] - '0' + carry;
    19             carry = t / BASE;
    20             c[k--] = t % BASE + '0';
    21 
    22             if(i < 0 && j < 0) break;
    23             if(i < 0) {a[0] = '0'; i = 0;}
    24             if(j < 0) {a[0] = '0'; j = 0;}
    25         }
    26         // 最后的进位处理
    27         c[k] = carry + '0';
    28         // 去掉高位的0
    29         while(c[k] == '0' && k < N)
    30             k++;
    31 
    32         // 输出结果
    33         c[N + 1] = '';
    34         printf("%s
    ", &c[k]);
    35     }
    36 
    37     return 0;
    38 }
  • 相关阅读:
    xx系统需求分析第七稿--权限管理(一)
    第四周学习进度总结
    hbase的Shell命令操作
    软件需求最佳实践读书笔记一
    hbase的Java基本操作
    Java 面向对象编程之接口
    Java 面向对象编程之继承的super关键词
    Java核心基础之数据类型
    Java 导出Excel
    JavaSE基础知识之修饰符和使用场景,你真的了解嘛
  • 原文地址:https://www.cnblogs.com/tigerisland/p/9694752.html
Copyright © 2020-2023  润新知