d681
輸入說明 :
輸入為一個二進位字串加上運算子 and 或 or
輸入的二進位字串<32 (5 bit)
且保證每個二進位字串長度一樣(5bit)
在每一行的最後會有一個空白
例如
10001 or 10000 and 11101 and 01001
^ ^ ^ ^ ^ ^ ^
依序是一個運算元+空白+運算子+空白+運算元+...最後是運算元+一個空白
每個運算元的長度都是5bit ,但不一定都是5個運算元+4個運算子
輸出說明 :
輸出轉換後的運算式 與答案
因為我讀進來的是數字1001不是二進位的,所以把它轉成陣列,在做運算
#include<stdio.h>
#include<string.h>
int main()
{
char buffer[10000];
int num;
int num2;
char op[5];
int len;
while(gets(buffer))
{
char *p = buffer;
int bin[5]={0};
int ans[5];
int i=0;
sscanf(p,"%d%*c%n",&num,&len);
p+=len;
printf("%05d",num);
while(0<num)
{
bin[i]=num%10;
num/=10;
i++;
}
for(i=0;i<5;i++)
ans[i]=bin[i];
while(*p)
{
sscanf(p,"%s%*c%n",&op,&len);
p+=len;
sscanf(p,"%d%*c%n",&num,&len);
p+=len;
if(strcmp(op,"and")==0)
{
printf("&&");
printf("%05d",num);
//轉成陣列
for(i=0;i<5;i++) bin[i]=0;
i=0;
while(0<num)
{
bin[i]=num%10;
num/=10;
i++;
}
for(i=0;i<5;i++)
ans[i]&=bin[i];
}
else if(strcmp(op,"or")==0)
{
printf("||");
printf("%05d",num);
for(i=0;i<5;i++) bin[i]=0;
i=0;
while(0<num)
{
bin[i]=num%10;
num/=10;
i++;
}
for(i=0;i<5;i++)
ans[i]|=bin[i];
}
if(*p=='\0')
{
printf(" = ");
for(i=4;i>=0;i--)
printf("%d",ans[i]);
puts("");
}
}
}
return 0;
}