1. 程式人生 > >【C語言】求數值的正數次方

【C語言】求數值的正數次方

//數值的正數次方
//實現函式double power(double base, int exponent),求base的exponent次方,不得使用庫函式,不需要考慮大數問題。
//注意:考慮非法輸入的返回。
#include <stdio.h>
#include <math.h>
bool Inpot_illegal = false;
bool equal(double num1, double num2)   //判斷兩數是否相等
{
	if ((num1 - num2) > -0.00001 && (num1 - num2) < 0.00001)
		return true;
	else
		return false;
}
double PowerExp(double base, int exponent)  //當指數>=0時,底數也>=0時計算
{
	if (exponent == 0)
		return 1;
	if (exponent == 1)
		return base;

	double result = PowerExp(base, exponent >> 1);
	result *= result;

	if (exponent & 0x1 == 1)
		result *= base;

	return result;
}
double Power(double base, int exponent)    //所有情況的求解
{
	Inpot_illegal = false;

	if (equal(base, 0.0) && exponent <= 0) //0的0次方及0的負數次方都是非法輸入 
	{
		Inpot_illegal = true;
		return 0.0;
	}
	int absExponent;   //取指數絕對值
	if (exponent < 0)
		absExponent = abs(exponent);
	else
		absExponent = exponent;

	double result = PowerExp(base, absExponent); //正常求解

	if (exponent < 0)   //指數小於0,則取倒數
		result = 1.0 / result;
	return result;
}
int main()
{
	int exp;
	double base, res;
	printf("請依次輸入底數和指數:");
	scanf_s("%lf %d", &base, &exp);
	res = Power(base, exp);

	if (Inpot_illegal)	//如果非法輸入,輸出error  
	{
		printf("error\n");
		return 0;
	}
	else
		printf("結果為:%f\n", res);
	return 0;
}

相關推薦

C語言數值正數次方

//數值的正數次方 //實現函式double power(double base, int exponent),求base的exponent次方,不得使用庫函式,不需要考慮大數問題。 //注意:考慮非

C語言Fibonacci數列前40項(迴圈)

程式碼為:  //求Fibonacci數列前40項 #include "stdio.h" int main(){ long int f1,f2,i; f1 = 1; f2 = 1; //賦初始值 for(i = 1;i<=20;i++){//迴圈20次,一次兩個,結

C語言Fibonacci數列的前20項(陣列)

//求Fibonacci數列的前20項 #include "stdio.h" int main(){     int i,j;     int f[20] = {1,1};//賦值數列前兩項     

C語言一千以內的素數 第一種方法

第一種方法:平常思維(人們第一印象會想到的)   //什麼是素數? -- 除了1和本身之外不能被其他數整除的數 #include "stdio.h" int main(){ int n,j,f;//變數解釋:n為我們要判斷的數,j為要與n相除的數,f為標誌 0 表示不是素數

C語言N的階乘

求N的階乘  //輸入一個數 n ,求n! #include "stdio.h" int main(){ int n,i; double l = 1; //提高精度 printf("Enter N:"); scanf("%d",&n); for(i = n; i

C語言1-N的和(遞迴法)

遞迴公式: 條件:f(1) = 1 遞迴條件:f(n-1) + n 為了手機顯示方便(配圖): 程式碼為: //求1-N的和 #include "stdio.h" int f(int n) { //定義函式f 出口為n等於1,否則將n與f(n-1)相

C語言階乘與階乘之和

  中學我們都學習了階乘的求法,比如要求整數n的階乘,則n!=n×(n-1)×(n-2)×…×2×1。現在有兩個問題,要用C語言編寫程式求n的階乘,以及求1!+2!+3!…+n!,該如何解決呢?   問題1:求n的階乘。   實現思路:   問題中的n需要

C語言一個數的二進位制位模式從左到右翻轉後對應的十進位制值。

用函式unsigned int reverse_bit(unsigned int value)實現想要的功能 value是我們想要求的值。 #include <stdio.h> #include <math.h> unsigned

C語言兩個數的最大公約數

思路: 輾轉相除法:以小的數除大數,所得的是整數,那這個數就是最大公約數,不然就用餘數來除剛才的除數,直到得到整數,這時作為除數的就是最大公約數。 #include<stdio.h>

C語言一個數的二進位制中 1 的個數

求一個數的二進位制的1的個數 1,通過模除的方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int main() { int i = 0;

C語言100~200之間的素數

分析:    判斷一個正整數m是否為素數有多種方法。         方法1:讓m依次被2,3,…,m-1除,如果m不能被2~m-1中的任何一個整數整除,則m是素數。         方法2:讓m依次被2,3,…,m/2除,如果m不能被2~m/2中的任何一個整數整除,則m是

C語言序列2/1+3/2+5/3+8/5+13/8+........前20項和。

我們能直接從序列上觀察出規律:(1)首先每一項的分母都與其前一項的分子相等, (2)每一項的分子都等於其前一項的分子與分母和。知道了規律,我們就好辦事兒!#include <stdio.h> int main () { double i = 2.0,j =

C語言1!+2!+3!+......+10!

通常我們使用函式:int fun(n)實現階乘求和功能;這次我們不用函式實現。而使用for迴圈。#include <stdio.h> int main () { int i,j,n = 1,m = 1; int sum = 0; for(i

C語言方程ax^2+bx+c=0的根

//求方程ax^2+bx+c=0的根 #include <stdio.h> #include <math.h> int main() { float a,b,c,dis,x1

c語言方程式 ax^2+bx+c=0 的根,分別考慮:1、有兩個不等的實根 2、有兩個相等的實根

// 求方程式 ax^2+bx+c=0 的根,分別考慮:1、有兩個不等的實根 2、有兩個相等的實根 #include <stdio.h> #include <math.h> int main() { int d; int a,b,c; do

C語言 a+aa+aaa+aaaa+aaaaa

#include<stdio.h> int main() { int a = 0; int Sn = 0; printf("請輸入a:"); scanf("%d", &a)

C語言推斷一個數是否為2的n次方

post data- popu scanf scan ng- 輸入 ont print //推斷一個數是否為2的n次方 #include <stdio.h> int is_two_n(int num) { if ((num&(num - 1))

C語言輸入一個整數,它的原碼,反碼,補碼值

補碼 while src info idt IV com scan -- 1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int m,n,a[10],i=0,y[

C語言 利用篩選法100以內的素數

演算法思路: 原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質數的倍數篩掉。 程式碼如下: //C語言 篩選法求100以內的素數 //原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經

C語言輸入一個整數N,N以內的素數之和

【C語言】輸入一個整數N,求N以內的素數之和   /* ============================================================================ Name