UESTC 1012 (進製轉換)(思維)

2021-07-10 17:04:47 字數 1665 閱讀 4076

uestc 1012  (進製轉換)(思維)

description

有一天人諏lee在隨手幫女神做題,突然女神發現了自己演算紙上的乙個式子,但是式子只有兩個加數卻沒有結果,最近在學不同進製加減法的女神忘了這個兩個數字是多少進製了(只記得是小於等於10

),但是她很好奇在可能的多少進製下這個式子得到的答案長度最長,為了從人贏lee手中搶走女神,你需要快速計算出這個答案,例如78+87

=?在10

進製下是165

,在9進製下是176

,而小於等於8

的進製顯然是不合法的,所以這個式子答案可能的最長長度就是3.

input

第一行讀入乙個整數 t(1

≤t≤100000

) 表示資料組數

接下來有t

行每行含兩個數a,b

(不超過4

位的非0

整數)

output

對於每個資料輸出乙個數字,表示可能的答案的最大長度

sample input

2 78 87

1 1

sample output3 2

思路:

思路:當ab同時為負或者同時為正時,很顯然,它們的和化為低進製時,資料長度相對較長。注意:當它們的和為負數時,負號也佔乙個單位長度。

通過例舉幾個例子時可以發現:無論a、b為正還是為負,把它們的和化為低進製,它們的和的資料長度會較長。但是不要忘記負號也佔乙個單位長度。

在決定進製時,取a,b中各個數字中最大的數字h,並以h+1為進製。把a+b的和按照h+1進製輸出,結果長度最長。

my solution:

/*2016.3.19*/

#include#include#includeusing namespace std;

int x[7],y[7],p[20];

int main()

if(a<0)

a1=-1*a;//如果a<0,先取整數部分,轉換到陣列中去

else

a1=a;

if(b<0)

b1=-1*b;//如果b<0,先取整數部分,轉換到陣列中去

else

b1=b;

for(i=1;i<=5;i++)

else

} for(i=1;i<=5;i++)

else

} if(h1>h2)//取a,b中最大的數字

h2=h1;

h2+=1;//確定進製

if(t1>t2)//確定陣列長度

h=t1;

else

h=t2;

if(a*b>0)//a<&&b<0和a>0&&b>0兩種情況

}if(a<0&&b<0)

else

} if(a<0&&b>0)//a>0&&b<0和a<0&&b>0兩種情況

printf("%d\n",i);

}if(a+b<0)

else

p[i]=x[i]-y[i];

}for(i=h;i>=1;i--)

printf("%d\n",i+1);

}} }

return 0;

}

16進製制轉2進製再轉8進製

藍橋杯刷題計畫,由於最大有十萬位16進製制數,所以直接選擇整形是無法儲存的,考慮到16進製制,8進製,2進製之間的關係,所以我們選擇,先轉2進製,再有2進製轉換為8進製。由於,一位16進製制數對應4位2進製數,一位8進製數對應3位2進製數,於是,我們可以用先用map進行乙個對映儲存,便於直接取用。另...

10進製轉2進製

題目 將10進製數字轉換為2進製。思考 進製轉換有三種情況。十進位制轉二,八,十六進製制 三種轉化的方法類似,我重點說十進位制轉二進位制的方法,其餘兩種情況可以模擬。十進位制轉二進位制 方法 10進製數字,整數部分除2後每次餘數反向取 小數部分乘2直到小數部分為0 特殊情況取位數 將整數部分正向取。...

16進製制轉8進製

很有意思。開始沒注意題直接 x o 然後看到了 這個16進製制的數長度不超過100000 妥妥又是高精度問題。還有個錯誤就是把二進位制左右反了,導致半天找不出錯。然後就把二進位制打出來,找到了。大體思路就是16 2 8 如 f 1111 17 ff 1111 1111 011 111 111 377...