假设用整型数组存储二进制数,即数组的一个元素存放二进制数的一位。编写函数实现该存储形式的二进制数的加1运算。
例如,二进制数1011用数组存储为:
a[0] a[1] a[2] a[3]
1 0 1 1
加1运算后的结果为:
a[0] a[1] a[2] a[3]
1 1 0 0
解题思路:
模拟题,写代码不难主要是理清思路耗费时间。
数组模拟进位:
总体分两种情况,需要进位和不需要进位。
代码如下:
#include<stdio.h>
void add(int a[],int n)
{
int i=n-1;
while(a[i]==1)//所有连续的1,变成0,遇到的第一个0,变成1
{
a[i]=0;
i--;
}
if(i!=-1)//判断位数是否需要增加
{
a[i]=1;
}
else
{
for(int i=1;i<=n;i++)//数组内元素全为1,加一需增加一位
{
a[i]=0;
}
a[0]=1;//进位首元素为1
n++;//数组长度+1
}
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
int a[5]={1,1,1,1};
add(a,4);
return 0;
}