原题题意:就是和模拟计算机中的数字二进制形式存储差不多,题目给出了数组n,a和b;主要求出数组c;c[i]=a[i]+b[i];这个题就是构造二进制数组,如果当前a [ i ] + b [ i ] = 1,则c [ i ] = 1;如果a [ i ] + b [ i ] = 2,就要开始进位了,否则就需要借位!
代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int n;
int p[N],a[N],b[N],c[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>p[i];
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
int x=0;//表示进位
for(int i=1;i<=n;i++)
{
x*=p[i];
int t=a[i]+b[i]+x;
if(t==0 || t==1)//两位加起来加上进位结果是0和1,不用进位,结果就是t
{
c[i]=t;
x=0;
}
else if(t==-1)//表示数字不够,需要借位,结果且为1
{
c[i]=1;
x=-1;
}
else if(t==2) //两位加起来加上进位结果是2,那么需要进位,并且这一位结果是0
{
c[i]=0;
x=1;
}
else if(t==3) //同理需要进位,结果为1
{
c[i]=1;
x=1;
}
x*=p[i];
}
for(int i=1;i<=n;i++)
{
if(i!=n) cout<<c[i]<<" ";
else cout<<c[i]<<endl;
}
return 0;
}