進製轉換規律的一點發現

2022-06-30 07:45:09 字數 1959 閱讀 9312

前兩天刷題刷到這樣一道題目,然後問了大佬這種解法的思路,才恍然大悟...

題意:給乙個長度不超過 18 的 01 串,你需要輸出這個串在 2, 3, 4, 5, 6, 7, 8, 9, 10 進製表示下的數值在 10 進製下的和。

輸入描述:

第一行是乙個正整數 t (t<=100000),表示測試資料的組數,

接下來 t 行,每行包含乙個長度不超過 18 的 01 串,保證沒有前導零。

輸出描述:

對於每組測試資料,輸出乙個整數。

示例1輸入210

101輸出

54393

當時我在想第乙個樣例字串是10,那它十進位制數就是2咯,那

三、四、五....九進製數不都是2嘛,但是2*9=18,根本不是54,哈哈哈哈當場笑噴!!!再細讀題意,在k進製下表示下的數值,比如10在三進製表示的值為0*30+1*31=3,在**制表示的值為0*40+1*41.寫出來誰都會,但是寫成程式就一臉懵逼,我在想它乾脆讓我寫個進製轉換器出來得了。

我也是後來才發現的規律,我們可以發現,這個01串在k進製表示的值都是從這個串(命名str)的最後一位開始進行計算,然後往前取數再進行計算,然後k(這裡假設是三進製)開始發生變化,第乙個肯定1,因為任何數0次冪是1,接著就是31=3,再接著就是32=9,也就是3*3,這裡需要拿乙個變數來記錄進製數本身的變化,先上一波**~

code:

#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+7;

const long long mod=1e9+7;

ll str,sum;

int t;

ll binary(int i)

return ans;

}int main()

return 0;

}

問了某佬才懂咋寫的,重點是寫出binary這個函式,某佬先問我1001在k進製下表示的值,我就說是k0*1+k1*0+k2*0+k3*1,但是還是不會(人笨就是這樣~),接著大佬說str%10就可以取出最後一位,拿個變數m來表示k的幾次方的值就可以了。

規律:str%10可以取出這個01串的最後一位(前提是01串),然後用str/10來去掉最後一位,再判斷str是不是為0,假如為0就說明已經操作完。

舉栗子舉栗子:str=1001吧,1001%10=1,1也就是最後一位咯,然後初始化m=1,k^0*1=m*1=1*1就可以得出第一步,接著用1001/10=100,就把最後一位1去掉了,按照這樣的規律,到最後一步1/10=0,就會不滿足條件,無法進入迴圈,直接把它累加的值return一下即可。

不過嘿嘿,沒錯,又有乙個函式,那就是strtol()函式,它的原型:long int strtol (const char* str, char** endptr, int base);

作用將乙個字串轉換為長整型long,這個說多沒意思,直接上網搜就好。

code:

#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+7;

const long long mod=1e9+7;

int t;

ll sum;

char str[20];

int main()

return 0;

}

看了一下平台記錄 :

方案執行時間(ms)

使用記憶體(kb)

方案一87

2064

方案二138

2148

呼叫函式雖然說簡潔一些,但是時間上還是有一定差距的~

讀C Primer的一點發現

1.識別符號不能包含兩個連續的下劃線 也不能以下劃線開頭後面緊跟乙個大寫字母 在函式體外定義的識別符號不能以下劃線開頭 int a 1 cout a endl 錯誤1error c2065 a 未宣告的識別符號d documents visual studio 2013 projects 實驗 實驗...

瀏覽Python官網之後的一點發現和收穫

首先,官網有源 分享的模組。而在其他python開源分享 上,很多較為複雜 很有創意的 也會被分享。這與其他程式語言不同,其他語言會生成執行檔案,而使用者僅可以進行使用,並無法得知程式的源 這在某種程度上會保護 編寫者的版權及利益。而python不同,這並不是程式設計師們約定俗成的,而是python...

隨筆 關於區域性變數的一點小發現

最近在研究多執行緒的時候,發現了乙個佇列 from queue import queue這個佇列在多執行緒中是屬於執行緒安全,但是使用過程中發現了這樣的乙個問題,那就是 from queue import queue def fun que que.put 1 def main q queue 3 ...