論壇上有人提出用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 二十進位制相加 字串...