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的個數的方法。一般來說找到二進位制數中...