● BigNum Problems - Big Power
جمعه, ۶ دی ۱۳۹۲، ۱۱:۴۷ ب.ظ
مسئله خیلی ساده است، آیا تا به حال سعی کرده اید دو عدد را به توان هم برسانید به طوری که جواب بدست آمده تا مثلاً 1000 رقم هم داشته باشد؟
پر واضح است که یک عدد 1000 رقمی در long long نمی گنجد! (نهایتاً 19 رقم را پاسخ می دهد) در نسخه ی اوّلیه ی این سؤال از سری سؤالات معروف Bignum Problem ، می خواهیم دو عدد long long را به توان هم برسانیم. قبل از دیدن ادامه مطلب، توجّه به مثال زیر هم خالی از لطف نیست.
input
13
92
output
13^92 = 3039403870834444806340783731173053535443315083722268135359571800908254256906888713534 531284301087613681
ورودی:
خط اوّل، A یک عدد طبیعی از جنس long long است که پایه را نشان می دهد (حداکثر 19 رقم)
خط دوّم، B یک عدد حسابی از جنس long long است که توان را نشان می دهد (حداکثر 19 رقم)
خروجی:
به عنوان خروجی، حاصل توان AB که یک عدد صحیح است را به صورت A^B = AB چاپ کنید.
پ.ن: در نسخه ی دوّم این سؤال، باید دو عدد 1000 رقمی (و بلکه بیشتر) را به توان هم برسانیم.
// A Drop of the Programming Sea - adops.blog.ir #include <iostream> #include <algorithm> using namespace std; const unsigned int mxn = 1.e5; int a[mxn]; int main() { long long base, exp; fill(a, a+mxn, 0); a[mxn-1] = 1; cin >> base >> exp; for(int j=0; j<exp; j++) { for(int i=0; i<mxn; i++) a[i]=a[i]*base; for(int i=mxn-1; i>0; i--) if(a[i]>9) { a[i-1]+=a[i]/10; a[i]=a[i]%10; } } int tmp = 1; for(int i=0; i<mxn; i++) if(a[i]!=0) { tmp = i; break; } cout << base << '^' << exp << " = "; for(int i=tmp; i<mxn; i++) cout << a[i]; cout << endl; return 0; }