这道题怎么做?输入一个整数a,二进制a的右侧第i个必须设置为0,而不改变其他数

输入一个整数a,二进制a的右侧第i个必须设置为0,而不改变其他数

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int i;
    scanf("%d",&i);
    int b = 1;
    b = b<<i;
    a = a^b;
    printf("%d",a);
    return 0;
}

#include <stdio.h>
int main()
{
    int a,i;
    int b = 1;
    scanf("%d %d",&a,&i);
    b << (i-1); //1左移i-1位
    a = (~b)&a; //b按位取反后与a进行与运算
    printf("%d",a);
    return 0;
}

回答:“右侧第i个”,假定为“从右往左数第i个数”,代码如下(C++编写,用栈肯定更简单):

#include<iostream>
using namespace std;

int main()
{    
    int a,n,num=0,b[10]={0};    
    cout<<"请输入一个数及它的第i位(例如10,3):";
    cin>>a>>n;        
    cout<<"二进制数为(逆序):";
    while(a!=0){
        cout<<a%2;    
        b[num]=a%2;                
        a=a/2;
        num++;
    }
    cout<<endl;
    b[n-1]=0;
    cout<<"修改后:";
    for(int i=num;i>0;i--){
        cout<<b[i-1];
    }
}