筆試題 求乙個數的開方,如根號2

2021-07-05 05:44:43 字數 2419 閱讀 5392

求乙個數的開方,如根號2,要求保留到小數點位後10位。

也就相當於求乙個數n的開方,我們用二分法進行計算,不斷縮小範圍,但是double、float不能直接等,最後如果 mid*mid和n的相差不超過乙個指定的最小值。那麼所求的mid就是我們得到的值。之後我們將它按照小數點之後10位列印出來就行。

**如下:

#include#include#includeusing namespace std;

void kaifang(double n,double accuracy);

void main()

void kaifang(double n,double accuracy)

printf("%.10f\n",kf);//利用原始的c列印出小數點後10位

cout<

注意:setprecision 也是包含在命名空間iomanip 中的c++ 操作符,該操作符的作用是設定浮點數小數點後的位數;

setprecision(2) 的意思就是小數點輸出的精度,即是小數點右面的數字的個數為2,c++預設的流輸出數值有效位是6。。

#include

它是i/o流控制頭文 件,就像c裡面的格式化輸出一樣.以下是一些常見的控制函式的: 

dec 置基數為10 相當於"%d" 

hex 置基數為16 相當於"%x" 

oct 置基數為8 相當於"%o" 

setioflags(ios::fixed) 固定的浮點顯示 

setioflags(ios::scientific) 指數表示 

setiosflags(ios::left) 左對齊 

setiosflags(ios::right) 右對齊 

setiosflags(ios::skipws 忽略前導空白 

setiosflags(ios::uppercase) 16進製制數大寫輸出 

setiosflags(ios::lowercase) 16進製制小寫輸出 

setiosflags(ios::showpoint) 強制顯示小數點 

setiosflags(ios::showpos) 強制顯示符號 

舉例: 

#include

#include

using namespace std; 

int main() 

利用牛頓迭代法,

任意整數x,我任猜它的平方根為y,如果不對或精度不夠準確,那我令y = (x+x/y)/2。如此迴圈反覆下去,y就會無限逼近x的平方根。

例如,我想求根號2等於多少。假如我猜測的結果為4,雖然錯的離譜,但你可以看到使用牛頓迭代法後這個值很快就趨近於根號2了:

這種演算法的原理很簡單,我們僅僅是不斷用(x,f(x))的切線來逼近方程x^2-a=0的根。根號a實際上就是x^2-a=0的乙個正實根,這個函式的導數是2x。也就是說,函式上任一點(x,f(x))處的切線斜率是2x。那麼,x-f(x)/(2x)就是乙個比x更接近的近似值。代入f(x)=x^2-a得到x-(x^2-a)/(2x),也就是(x+a/x)/2。

**如下:

double newtoniteration (double n,double accuracy)

printf("%.10f\n",y);//利用原始的c列印出小數點後10位

cout<

#include#include#includeusing namespace std;

void kaifang(double n,double accuracy);

double newtoniteration (double n,double accuracy);

void main()

void kaifang(double n,double accuracy)

printf("%.10f\n",kf);//利用原始的c列印出小數點後10位

cout

printf("%.10f\n",y);//利用原始的c列印出小數點後10位

從結果中可以看出牛頓法的計算效率好一些,我還試了其他的y值,若y值為4或者3時,仍然while4次,就算是8,也只需while 7次,相較於29次的二分法,效率要高很多。

求乙個數約數的個數

求約數的個數 計算乙個整數的約數個數 輸入格式 輸入乙個整數 輸出格式 輸出一行,為輸入整數的約數的個數 樣例輸入 10 樣例輸出 4ac import math number int raw input count 0 sqrt float math.sqrt number if number s...

求乙個數2進製中1的個數

include include int count one bits unsigned int value int i 0 int count 0 for i 0 i return count int main 方法2 進行32次迴圈,把這個數 1,把結果加到計數器,把這個數右移一位,直到退出迴圈。...

求乙個數中1的個數

碰到遇到乙個有趣的題,求乙個數二進位制的表示中1的個數,該題有兩種解法,一種是使用短除法將該數直接轉化為二進位制數,另一種比較巧妙的演算法是使用與運算,原理如下圖所示 依照此種思入有如下演算法 int numberof1 solution3 int i return count 依照短處法的思路 有...