qduoj 碼農必修 x或y等於x加y)

2021-07-23 03:08:44 字數 1464 閱讀 5046

描述

給你 x, k, 求滿足 x + y= x | y 這個公式的第 k 小的正整數y。

哦對,「|」表示的是二進位制裡面的按位或操作 輸入

輸入檔案中包含多組資料,每組資料為兩個正整數 x , k。 滿足(0 < x , k ≤ 2,000,000,000)。 輸出

輸出乙個數y

樣例輸入1

複製

5 1

樣例輸出1

2

思路:按二進位制考慮,例如5的二進位制位0101,第一小的y易得為2,也就是0010,繼續找第二小的,為1000,第三1010,可以看出y和x的關係,就是x的為1的位對應的y的位都是零,因為1與「0和1「」或運算都為1,只考慮這一位,如果讓此位或運算和加運算乙個數相等的話,這個數只能是0;但是為0的位,無論或還是加都可以保證相等,所以y的值中x為1那些位可以確定,而x為0的位需根據k來確定,k=1(0001),按位從後往前分別賦到y的其餘位上。

因為資料量比較大,所以要用到大數相乘(二進位制轉回十進位制結果時要用到)

#include#includeint two(int num[100],int x);

int multip(int numy[100],int n);

int main()

else

numy[i]=0;

if(j>=lenk)

break;

} // for(j=i;j>=0;j--)

// printf("%d",numy[j]);

// printf("\n");

for(j=0;j<=i;j++)

}for(i=tn-1;i>=0;i--)

printf("%d",num[i]);

printf("\n");

} return 0;

}int two(int num[100],int x)

return i;

}int multip(int num[100],int n)

} return n;

}

感覺寫的挺麻煩。

分享一篇看的別人的**:走你☞

大體思路是一樣的,但他寫的比較簡單,沒想到longlong就能過。。。。。。。。。。仔細想想的確是,每個可填的位上能產生兩種情況,那就是2的n次方個,唉還是題目理解的不夠透徹

#includeusing namespace std;  

long long thenum(int x, int k)

//index2向左移動一位

index2 <<= 1;

} //index1向左移動一位

index1 <<= 1;

} return (tmp - x);

}

int main(void)

return 0;

}

碼農何去何從

這篇文章是說我的經歷和選擇,沒有任何對從事軟體開發的人員的不敬,更加不是要打擊新入門的開發人員熱情。你有你理解的方式和自由,要在回覆那裡指責為那是沒有必要的,你有時間還是去多看看書,多寫寫 好了。剛在隔壁看見了乙個22歲年輕人遙相呼應的文章,在這裡羅嗦一下。年輕就是資本,有衝勁,這是最大的優勢,好好...

碼農的無奈

大多時候我的思想還是挺積極上進的,曾經看過別人寫的 感覺很一般,甚至有的時候感覺那個水平都不如我。今天重新回顧下,可能其中的苦辣酸甜只有自己才知道。需求在不停的變動,則要做相應的修改,所以 就變的越 來越差了。回頭看下自己寫的 感覺都不認識的樣子,或許我現在還知道為什麼要那麼做,但過了幾天甚至10幾...

碼農的迷茫

已然連連續續敲了兩年 卻越來越迷茫了!開始畫頁面,寫前台,玩js。跳槽之後寫後台,與資料庫相關!現在卻發現一無是處,前台不精,後台搭不出理想的框架,資料庫只是停留在使用安裝上,熟悉一些linux命令,會寫基本的shell指令碼。發現幾乎什麼都會,卻什麼都比較零散。現在公司為銀行乙方,為小銀行做一些外...