基本數學問題

來源:互聯網
上載者:User

標籤:

數的長度:
N!是非常大的數,計算公式為:N!=N*(N-1)*(N-2)……2*1.現在需要知道N!有多少(十進位)位。每行輸入1個正整數N。對於每個N,輸出N!的(十進位)位元
分析:
所謂N!的(十進位)位元,就是(lgN!)+1,根據數學公式,有N!=1*2*3……(N-1)*N,所以lgN!=lg2+lg3……lgN。

#include<stdio.h>#include<math.h>int main(void){    int N,i;//定義正整數N     double sum;//定義N!(十進位)位元    while(scanf("%d",&N)!=EOF)    {        sum=0.0;        for(i=2;i<=N;++i)        {            sum=sum+log10(i);           }           printf("%d\n",(int)sum+1);    }     return 0;}

最左邊的數
/*給一個正整數N,請輸入N^N最左邊的數。
輸入包含一系列測數組,輸入組的第一行為整數T,表示共有T組,每組測試組包含一個正整數N,1<=N<=1000000000.
輸出N^N最左邊的書。
分析:
本題目主要是給定一個正整數N,計算N^N的結果的最高位上的數位值。
如果通過求N^N的最後結果然後再求最高位元字,方法簡單,但是存在問題,就是N比較大的時候,N^N太大而無法用程式儲存,需要設計大數的儲存方案,且帶來了計算過程中的難度
而且消耗大量記憶體空間和時間,不可取。
另一種方法,設N^N=d..10^(k-1),其中k表示N^N的位元,那麼d.=10^((lgN^N)-(k-1)),再對d.*取整即可獲得最終結果。因為k等於lgN^N的整數部分加1,即k=lgN^N+1(取整)
,所以可獲得d的計算公式d=10^(lgN^N-lg10N^N)(取整)*/

#include<stdio.h> #include<math.h>int main(void){    int N,T;    scanf("%d",&T);    while(T--)    {        scanf("%d",&N);        printf("%d\n",(int)pow(10,N*log10(N)-(int)(N*log10(N))));           }    return 0;}

基本數學問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.