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...