描述
給你 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指令碼。發現幾乎什麼都會,卻什麼都比較零散。現在公司為銀行乙方,為小銀行做一些外...