二進位制找規律(數列)

2021-10-06 00:09:12 字數 1412 閱讀 2832

powered by:ab_in 局外人

給定乙個正整數k(3≤k≤15),把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k=3時,這個序列是:

1,3,4,9,10,12,13,…

(該序列實際上就是:30,31,30+31,32,30+32,31+32,30+31+32,…)

請你求出這個序列的第n項的值(用10進製數表示)。

例如,對於k=3,n=100,正確答案應該是981。

只有1行,為2個正整數,用乙個空格隔開: k n

(k、n的含義與上述的問題描述一致,且3≤k≤15,10≤n≤1000)。

計算結果,是乙個正整數(在所有的測試資料中,結果均不超過2.1*10^9)。(整數前不要有空格和其他符號)。

蒟蒻想法

看到取或不取和方冪,應該想到轉化為二進位制來觀察規律,說個題外話,看完題,一定要先在紙上總結規律,看好資料範圍,確定演算法再做。

一開始,蒟蒻想用dfs+set做,資料也挺小的,o(n^2)肯定能解決,但是絕對不是最佳辦法。

重要的是思想吧,**都挺短的。

上**

#include

typedef

long

long ll;

using

namespace std;

ll ans;

int a[

100001

],n,k,l;

intmain()

for(

int i=

1;i<=l;i++

) cout

}

while

true

:try

:

k,n=

input()

.split(

) ans=

0 s=

str(

bin(

int(n)))

s1=s[2:

]#去除0b

l=len(s1)-1

for i in

range

(len

(s1)):

ans+=

(int

)(s1[i])*

(int

(k)**

int(l-i)

)#盡量用連乘或者移位,pow的話會轉到double型

print

(ans)

except

:break

寫個10進製轉n進製的函式也不錯

void convert (

int n,

int num)

}

完結。

二進位制的規律

電腦是乙個很神奇的東西。小小的cpu裡裝著很多很多的計算。有些數是連用人腦也需要費一些時間。但是電腦依舊可以在短時間內算出來。但是電腦的演算法和人的演算法是遠遠不一樣的。電腦的演算法只有零和一直說也就是二進位制,而人的演算法則是由零到九,是十進位制。在昨晚從一寫到五百一十二然後每個數都轉換為二進位制...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

找二進位制0 和1

找二進位制中0和1的個數的問題也是老生常談考察思維的一道題了。網上關於找二進位制中1的個數的已經論述很好,這裡也不花太多篇幅講找到1的個數原理。先直接上 int n 0 cin n intcount 0 while n cout 0 下面花多一點篇幅來講講找到0的個數的方法。一般來說找到二進位制數中...