二进制加法 (C语言)

Description

计算机使用的是二进制,和十进制不同的是:二进制运算“逢二进一”。下面举一个二进制加法的运算实例:

   11101          

+    110          

------------       

 100011          

1所在的位置:

6、2、1          

   
你的任务是:对于任意的两个正的二进制数,求它们和中“1”所在的位置。

Input

有多组测试数据,每组测试数据共两行:

第一行:二进制的加数A,总长度<=200。

第二行:二进制的加数B,总长度<=200。

Output

输出二进制数A+B中“1”所在的位置,位置排序为从左到右:N、N-1、N-2...1,数据之间用空格分隔,行末没有多余的空格。


温馨提醒:
输出小技巧。如何在不确定何时为第一次输出,也不知道何时为最后一次输出时控制末尾的空格,使程序不会在末尾多输出一个空格导致程序错误。下面是一个例子:
int i, hasPrinted;
hasPrinted = 0;
for (i=0; i<n; i++) {
    if (xxxxxxxx) { // 这里写输出的判定条件
        if (!hasPrinted) {// 如果没有进行过输出
            printf(“%d”, n[i]); // 根据你的情况输出,不一定就是%d和n[i]
            hasPrinted = 1;
        } else {
            printf(“ %d”, n[i]);
        }
    }
}


这样你的输出就不会在末尾多出一个空格了!

Samples

input 

111
110
11101
110

output

4 3 1
6 2 1

AC代码

#include <stdio.h>

int main() {
	char A[210], B[210], sum[210];
	int pos[210];

	while (scanf("%s", A)!=EOF) {
		scanf("%s", B);

		int lenA = strlen(A);
		int lenB = strlen(B);
		
		int carry = 0;
		int i = lenA - 1;
		int j = lenB - 1;
		int k = 0;

		//计算A+B,从后往前相加
		while (i >= 0 || j >= 0 || carry) {
			int bitA = (i >= 0) ? A[i] - '0' : 0;
			int bitB = (j >= 0) ? B[j] - '0' : 0;
			
			int sumBit = bitA + bitB + carry;
			carry = sumBit / 2;
			sum[k++] = sumBit % 2 + '0';

			i--;
			j--;
		}

		//寻找1的位置
		int count = 0;
		for (i = k-1; i >= 0; i--) {
			if (sum[i] == '1') {
				pos[count++] = i + 1;
			}
		}

		//输出
		for (i = 0; i < count; i++) {
			printf("%d", pos[i]);
			if (i != count - 1) {
				printf(" ");
			}
		}		
		printf("\n");
	}
	return 0;
}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值