English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

我想寫一個函式可求xy
y為x的次方,例:
2的4次方=2*2*2*2=16
使用者能自行輸入x跟y希望能有高手幫幫我設計一下

2007-08-01 09:57:49 · 5 個解答 · 發問者 ? 1 in 電腦與網際網路 程式設計

5 個解答

//Power by Visual Studio 2005
#include
#include
#include
//定義最大值
#define MAX 0xff
#define EXPMAX 0xffff
//被乘數 *a,乘數 b,答案 *c,答案位數 Bit_length
void multiply(int *a, int b, int *c, int Bit_length) {
int i,tmp,carry=0;
for(i=Bit_length-1;i>=0;i--){
tmp=a[i]*b+carry,c[i]=tmp%10,carry=tmp/10;
}
}
int main(int argc, char* argv[]){
//==========START==========//
FILE *f;
char *fn="output.txt";
int N,EXP,i,j,setw,*number,*result;
double BIT;
printf("Ex: 2^10= 1024\nMAX= %d^%d\nInput main Number: ",MAX,EXPMAX),scanf("%d",&N);
printf("Input EXP Number: "),scanf("%d",&EXP);
if((N>=0)&&(N<=MAX)&&(EXP>=0)&&(EXP<=EXPMAX)){
//計算位數
BIT=(int)(EXP*log10(N)+1);
number=(int*)malloc((int)BIT*sizeof(int)),result=(int*)malloc((int)BIT*sizeof(int));
//初始化被乘數
for(i=0;i<(int)BIT;i++){
number[i]=(i==((int)BIT-1)?1:0);
}
//進行運算
for(i=0;i multiply(number,N,result,(int)BIT);
for(j=0;j<(int)BIT;j++){
number[j]=result[j];
}
}
//顯示數值
printf("%d^%d= ",N,EXP);
for(j=0,setw=((int)BIT%4)-1;j<(int)BIT;j++){
printf("%d",number[j]);
if((int)BIT>4){
printf("%s",((j==setw)||(j>setw&&(j-setw)%4==0&&(j+1)!=(int)BIT)?",":""));
}
}
//輸出文字檔
f=fopen(fn,"w");
if(f!=NULL){
fprintf(f,"%d!= ",N);
for(j=0;j<(int)BIT;j++){
fprintf(f,"%d",number[j]);
if((int)BIT>4){
fprintf(f,"%s",((j==setw)||(j>setw&&(j-setw)%4==0&&(j+1)!=(int)BIT)?",":""));
}
}
fclose(f);
}
//釋放記憶體
free(number),free(result);
}else{
printf("Incorrect number!\n");
}
//==========END==========//
printf("\n"),system("PAUSE");
return 0;
}

2007-08-01 17:36:57 補充:
小綿羊肥答的程式碼是可以計算大型數值的,假如你的記憶體足夠的話,就可以計算超級大的數值~

2007-08-01 12:00:51 · answer #1 · answered by Big_John-tw 7 · 0 0

版主又沒有要算大數。

而小綿羊的程式算大數很慢!
而,算 power 也有更快的算法!
在算大數時,速度有極大的差別!

所以,我不投大數版。

2007-08-10 01:43:21 · answer #2 · answered by 原始人 4 · 0 0

// 這個是比較單純但是不用pow的寫法

#include
#include

int main(int argc, char *argv[])
{
int x,y,result;
printf("enter two integers (x,y), and I will you x^y\n");
printf("x is:\n");
scanf("%d",&x);
printf("y is:\n");
scanf("%d",&y);

if (y==0) result=1;
else {
for(result=1 ; y>0 ; y--)
result = result*x;
}
printf("result is %d\n",result);
system("PAUSE");
return 0;
}

2007-08-04 12:45:34 · answer #3 · answered by ? 1 · 0 0

#include
#include
using namespace std;

int main()
{
double x, y;
cout << "x^y 輸入x y" << endl;
cin >> x >> y;
cout << pow(x,y) << endl;
system("pause");
}
§千‧古‧瞑‧言§ 所說的方式

2007-08-01 16:31:24 · answer #4 · answered by zonyen 3 · 0 0

cmath裡有內建的pow函式可以用啦

2007-08-01 11:11:51 · answer #5 · answered by Frederich 4 · 0 0

fedest.com, questions and answers