-3

在 c++ 中,我如何编写一个读取 2 个二进制数然后打印加法结果的程序,使用函数读取每个数字具有 4 位的二进制数,并使用函数添加 (binary 1, binary 2) ? !

我找到了这个程序,但我不希望它带有数组,我只需要它的函数。

#include <iostream>
#include <string>
using namespace std;

int main()
{
int a[4];
int b[4];
int carry=0;
int result[5];


a[0]=1;
a[1]=0;
a[2]=0;
a[3]=1;

b[0]=1;
b[1]=1;
b[2]=1;
b[3]=1;

for(int i=0; i<4; i++)
{

    if(a[i]+b[i]+carry==3)
    {
    result[i]=1;
    carry=1;
    }
    if(a[i]+b[i]+carry==2)
    {
    result[i]=0;
    carry=1;
    }
    if(a[i]+b[i]+carry==1)
    {
    result[i]=1;
    carry=0;
    }
    if(a[i]+b[i]+carry==0)
    {
    result[i]=0;
    carry=0;
    }


}
result[4]=carry;
for(int j=4; j>=0; j--)
{
    cout<<result[j];

}
cout<<endl;

    return 0;
}
4

1 回答 1

0

不幸的是,没有这样一个函数std::iostream,并且scanf-family 支持octhexdec但不支持二进制数字表示。

基本上,使用strtol和一个itoa. 由于后者在 gcc 上不可用(因为它不符合 ANSI),所以我为itoa.

#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;

/*CREDIT goes to: http://www.jb.man.ac.uk/~slowe/cpp/itoa.html*/
// you should not need this function if compiled smoothly without it
//  ( if you're on Microsoft Visual Studio, you don't need this function
char* itoa(int val, int base){  
    static char buf[33] = {0};  
    int i = 30; 
    for(; val && i ; --i, val /= base)  
        buf[i] = "0123456789abcdef"[val % base];    
    return &buf[i+1];   
}

int main(){
    int a,b;
    char p[100];
    printf("enter your first number:\n");
    scanf("%s",p);
    a = strtol(p,NULL,2);
    printf("enter your second number:\n");
    scanf("%s",p);    
    b = strtol(p,NULL,2);
    printf( itoa( a+b , 2 ) );
    printf("\n");
}
于 2013-05-10T13:11:29.627 回答