日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

求a^b前n位和后n位

發布時間:2025/3/16 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求a^b前n位和后n位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

求解a^b后n位就不說了,直接用快速冪就行了;

主要講的是a^b前n位:在網上看了題解才有點明白

m=n^n;兩邊同取對數,得到,log10(m)=n*log10(n);再得到,m=10^(n*log10(n));

然后,對于10的整數次冪,第一位是1,所以,第一位數取決于n*log10(n)的小數部分

總之,log很強大啊,在求一個數的位數上,在將大整數化成范圍內的整數上,在指數問題上

對于一個>=1的正整數m,10^(log10(m)-(int)log10(m))這個值,是原值m的1/k,k=1,10,100,1000...

為什么呢,看下面:

m=375,375=10^2.5740312677277188

對于一個>=1的正整數m,我們假設m=10^(a+b),a為指數的整數部分,b為指數的小數部分

(對比上面,如果m=375,那么a=2,b=0.5740312677277188)

則log10(m)-(int)log10(m)=(a+b)-a=b; 那么10^b是什么東西呢?

對于任意數m,m=10^(a+b)=10^a*10^b,顯然10^a={1,10,100,1000,10000...};


也就說,10^(b的小數部分)最終將直接影響最左邊的N位數。將這個結果乘以1,就是前1位的答案,乘以10,就是前2位的答案。。。類推

#include<iostream> #include<cmath> using namespace std; int pow(int a,int k) //后3位數的快速冪算法 { int ans=1; a%=1000; while(k) { if(k&1) { ans=ans*a; ans%=1000; } a=a*a; a%=1000; k>>=1; } return ans; } int main() { __int64 c; double a,b; int n,m,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); a=m*log10(0.0+n); c=(__int64)a; //整數部分 b=a-c; //小數部分 c=(__int64)(pow(10.0,b)*100); //結果乘以100,也就意味著是前3位 printf("%I64d...%03d\n",c,pow(n,m)); } return 0; }

總結

以上是生活随笔為你收集整理的求a^b前n位和后n位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。