36進製數的加法運算

2021-06-02 12:14:47 字數 999 閱讀 1249

論壇上有人提出用36進製進行加法運算,而且要求一定得用 sql 語句寫,其36進製即採用0-9,a-z這36個符號表示數值,試著寫了玩兒:

--建立字元轉換為數值的函式

create function cton36

(@s varchar(12))

returns bigint

asbegin

declare @n bigint

set @s=upper(@s)

select @n=isnull(@n,0)+

(case when ascii(right(@s,number+1))>=65 then ascii(right(@s,number+1))-55 else ascii(right(@s,number+1))-48 end)*power(convert(bigint,36),number)

from master..spt_values where type='p' and number0

begin

set @s=char(case when @n%36<10 then 48+@n%36 else 55+@n%36 end)+@s

set @n=@n/36

endreturn @s

endgo

--運算

select dbo.ntoc36(dbo.cton36('f87q3jds9')+dbo.cton36('437dz'))

/*------------

f87q7ml68

(1 行受影響)

*/go

--刪除自定義函式

drop function dbo.cton36,dbo.ntoc36

--說明:受 bigint 最大數值的限制,上述轉換字元數最長不超過 12 位.

因為bigint資料型別最多只能容納'zzzzzzzzzzzz'轉換的值,再大就溢位了(並不會提示出錯),因此上述轉換如果位數大的話,不能相乘再轉回去。當然數值小的時候是可以的。

36進製數的加法運算

題目 36進製由0 9,a z,共36個字元表示,最小為 0 0 9 對應十進位制的09,a z 對應十進位制的1035 例如 1b 換算成10進製等於 1 36 1 11 36 0 36 11 47 要求按照加法規則計算出任意兩個36進製正整數的和 如 按照加法規則,計算 1b 2x 48 要求 ...

36進製數與10進製數互轉

10進製整數轉化成36進製字串 include stdafx.h include int main for i 0 num i for i i 0 i printf c a i 10 a i 0 a i 10 a printf n return 0 引數描述 hex10 被轉換10進製數字 測試方法...

二十進位制數的加法

題目詳情 在二十進位制中,我們除了使用數字0 9以外,還使用字母a j 表示10 19 給定兩個二十進位制整數,求它們的和。輸入是兩個二十進位制整數,且都大於0,不超過100位 輸出是它們的和 二十進位制 且不包含首0。我們用字串來表示二十進位制整數。class program 二十進位制相加 字串...