導航:首頁 > 軟體知識 > a的b次方怎麼編寫程序

a的b次方怎麼編寫程序

發布時間:2023-02-22 14:31:36

❶ c語言編寫計算a的b次方的函數

這個演算法,其實就是用連乘來實現乘方。只是在連乘的中間的每一步都用除以c的余數來代替原數。
之所以可以如此做,是因為整數有如下性質可以利用:
如果x除以c的余數是x,那麼(x*y)和(x*y)各除以c,余數相等。
故作乘法時用x代替x,積除以c的余數不變。
這個性質的道理不難理解:考慮(x*y)和(x*y)的差:等於(x-x)*y。而(x-x)顯然是c的整數倍,y也是整數,故(x*y)和(x*y)的差是c的整數倍,所以(x*y)和(x*y)各除以c,余數相等。
這個演算法的好處是:中間的每一步都用除以c的余數來代替原數,可以防止中間結果過大,從而不會溢出。如果不這樣做,而是直接求乘方,那麼中間是很容易溢出的。
如果直接用pow函數,缺點是pow函數參數和返回值都是實型數,存在誤差,而c語言強制類型轉換取整又是只舍不入,需在程序中適當處理防止結果可能錯1。

❷ 用匯編語言怎麼實現a的b次方

用循環乘法。匯編里只有基本的加減乘除運算,其它的的數學運算,都是在這4個基本運算的基礎上,用演算法實現的。

❸ c 求a的b次方

原因樓上的已經說的夠明白了,我就不多說了,我給你一個我用數組做的演算法,可以達到你的要求,還可以用雙鏈表設計演算法,唯一的好處就是可以省些空間,我看以你現在這個代碼的話,雙鏈表可能離你還很遙遠,所以就選擇數組完成。

#include <stdio.h>

#define SIZE 500/* 有效位500 */

void main(void)
{
int i, j, k;
int count;/* 記數變數 */
int flag;/* 記數變數 */
int lenMax;/* 記錄數組sum的長度變數 */
int sum[SIZE] = { 0 };/* 過度數組 */
int [SIZE] = { 0 };/* 將數字拆分保存在裡面 */
int tmp[SIZE][SIZE] = { 0 };/* 過度數組 */
char result[SIZE] = {'1', '\0'};/* 保存結果 */

int num;/* 冪 */
char data[SIZE] = { '\0' };/* 數 */

printf("數 : ");
gets(data);

printf("冪 : ");
scanf("%d", &num);

/******************************************/
/*****************核心演算法*****************/

for (k=0; k<num; k++)/* 冪 */
{
for (i=0; i<SIZE; i++)/* 初始化sum成員(用於累加) */
{
sum[i] = 0;
}//endfor
lenMax = 0;/* 初始化 */

for (i=0; result[i]!='\0'; i++)
{
for (j=0; data[j]!='\0'; j++)
{
tmp[i][j] = (data[j] - '0') * (result[i] - '0');/* 字元形轉整形 */

sum[i+j] += tmp[i][j];/* 保存sum[0]到sum[lenMax]值 */

if (lenMax < (i + j))
{
lenMax = i + j;/* 記錄數組sum長度 */
}//endif
}//endfor
}//endfor

for (i=lenMax; i>0; i--)/* 對數據進行處理 */
{
if (sum[i] > 9)
{
sum[i-1] += (sum[i] / 10);
sum[i] %= 10;
}//endif
}//endfor

flag = 0;/* 初始化 */
for (i=0; i<=lenMax; i++)
{

count = 0;/* 初始化 */
if (sum[i] < 10)
{
result[flag++] = sum[i] + '0';/* 賦值 */
}//endif
else/* if (sum[i] >= 10)對數據進行拆分 */
{
for ( ; sum[i]>0; sum[i]/=10)
{
[count++] = sum[i] % 10;
}//endfor
for (count--; count>=0; count--)
{
result[flag++] = [count] + '0';/* 賦值 */
}//endfor
}//endelse
}//endfor
result[flag] = '\0';/* 將save做成完整字元串 */

for (i=0; result[i]!='\0'; i++)/* 為驗證結論正確列印所有過程以便觀察 */
{
putchar(result[i]);
putchar(' ');
}//endfor
printf("\n");
}//endfor

/*******************************************/

printf("\nResult : ");

for (i=0; result[i]!='\0'; i++)/* 最後結果 */
{
putchar(result[i]);
}//endfor

printf("\n\n\n\n\n");
}

如果對你有所幫助,請記得採納最佳答案,謝謝!

❹ C語言求A的B次方

scanf("%f%f",&a,&b); 改為 scanf("%lf%lf",&a,&b);
printf("%f",c);改為 printf("%lf",c);
因為你的a,b,c是double類型的,所以用"%lf"而不是"%f"

❺ 編寫程序求a的b次方,運用遞歸函數和主函數

#include<stdio.h>

double a_b(double x,int n)

{

if(n==0)return 1;

else return x*a_b(x,n-1);

}

int main()

{ double a;

int b;

scanf("%lf %d",&a,&b);

printf("%g^%d=%g ",a,b,a_b(a,b));

system("pause");

}

❻ c語言中怎樣寫a的b次方,高手,請將整個程序寫出來。謝謝

#include <stdio.h>
int f(int x,int y);
int main()
{
int a,b;
printf("輸入兩個正整數:");
scanf("%d %d",&a,&b);
printf("a的b次方=%d\n",f(a,b));
return 0;
}
int f(int x,int y)
{
if(y==1)return x;
else
return x*f(x,y-1);
}

閱讀全文

與a的b次方怎麼編寫程序相關的資料

熱點內容
程序員離職回老家做什麼生活 瀏覽:811
如何補充打疫苗信息 瀏覽:956
遵義的古董交易市場在哪裡 瀏覽:845
如何做巴斯夫代理 瀏覽:527
怎麼獲得全部信息 瀏覽:907
信息技術的服務主體是什麼 瀏覽:527
遷戶口程序是什麼意思 瀏覽:732
宜春代理記賬一個月多少錢 瀏覽:516
一加手機如何解除後台程序 瀏覽:294
顯卡程序右上角圖標怎麼關 瀏覽:930
護膚酸有哪些產品 瀏覽:22
什麼叫包灰技術 瀏覽:332
什麼表示jdk常用程序 瀏覽:654
中國信息招標怎麼樣 瀏覽:68
微信小程序去水印哪個好用 瀏覽:118
招主播招代理合夥人是怎麼回事 瀏覽:343
17歲學什麼技術 瀏覽:557
時鍾屏幕保護程序什麼意思 瀏覽:708
在東莞找什麼代理 瀏覽:672
錢江小商品市場在什麼區 瀏覽:639