HZNUOJ-1021-二进制加法
题解
1、对输入的两个字符串进行操作使两字符串等长,且在最前端加入一个‘0’
2、从后往前字符串对应数字相加,逢2进1
3、从后往前输出“1”所在的位置,注意输出格式
AC代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
char a[210],b[210];
int len1,len2,i,j,k;
while(scanf("%s %s",a,b)!=EOF) {
k=len1=strlen(a),len2=strlen(b);
if(len2>len1){
k=len2;
}
for(i=0; i<k; i++)
a[k-i]=a[len1-i-1];
for(i=0; i<=k-len1; i++)
a[i]='0';
for(i=0; i<=k; i++)
b[k-i]=b[len2-i-1];
for(i=0; i<=k-len2; i++)
b[i]='0';
//使两字符串等长,并且加入一位使第一位为'0'
j=0;
for(i=0; i<k; i++) {
j=(a[k-i]-'0'+b[k-i]-'0'+j);
a[k-i]=j%2+'0';
j=j/2;
}
//从后往前逢2进1
a[0]=j+'0';//最后的第一位就是j对应的数字
int flag=0;
for(int i=0; i<=k; i++) {
if(a[i]=='1'&&flag==0) {
printf("%d",k+1-i);
flag=1;
}
else if(a[i]=='1'&&flag==1) {
printf("% d",k+1-i);
}
}//从后往前输出'1'的位置,注意输出格式
printf("\n");
}
return 0;
}