创建一个 return pow b^e 的函数
Create a function that return the pow b^e
我必须创建一个函数来 return b^e 的值。这就是我所做的:
#include<stdio.h>
#include<math.h>
int funzione_potenza (int b, int e);
int main ()
{
int b, e, potenza;
printf("Inserisci la base: ");
scanf("%d",&b);
printf("Inserisci l'esponente: ");
scanf("%d",&e);
printf("La potenza e' %d",potenza);
return 0;
}
int funzione_potenza (int b, int e)
{
int potenza;
potenza = pow(b,e);
return potenza;
}
当我 运行 它时,它会显示错误的功率值(例如 5343123)
怎么了?
我的目的是向您展示实现这一点的方式,但这基本上是重新发明轮子,因此不推荐。在这里,我展示了如何尝试编写幂函数的粗略概念。
另一种实现方式是
int mpow(int b, int e) {
if (e <= -1) {
fprintf(stderr, "mpow:(b: integer, e:non-negative integer )");
exit(1);
}
if (e == 0) return 1;
if (b == 0) return 0;
int ans = 1;
for (int i = 1; i <= e; i++) {
if (!checkIfOverflown(ans, b)) ans = ans * b;
else {
fprintf(stderr, "%s\n", "overflow in multiplication");
exit(1);
}
}
return ans;
}
作为pow
returns double
你不应该把它转换成整数(你为什么要失去精度)。
为什么要在函数中包装 pow
?可以直接使用。
我的函数正确吗?
这个函数是正确的,只要整数不会溢出东西弄乱它。对于 b
、e
的小值,它有效。
另外一种更简单有效的方法是
int mpow(int b, int e) {
int res = 1, flag = 0;
if (e <= -1) {
fprintf(stderr, "mpow:(b: integer, e:non-negative integer )");
exit(1);
}
while (e > 0) {
if (e % 2 == 1) {
if (!checkIfOverflown(res, b))
res = (res * b);
else {
flag = 1;
break;
}
}
if (!checkIfOverflown(b, b))
b = (b * b);
else {
flag = 1;
break;
}
e /= 2;
}
if( flag ){
fprintf(stderr, "%s\n", "overflow in multiplication");
exit(1);
}
return res;
}
您不需要函数来调用内置的 pow 函数。如果您正在尝试编写自己的函数,请尝试使用循环或递归构建解决方案。
假设您可以自由使用数学库,该方法将 return 正确答案,除非数字适合 "int"。否则,请考虑对更大的数字使用 "long long int"。
如果不允许您使用数学库,这里是一个正确的实现:
long long int power(int b, int e){
if(e==0){
return 1;
}
else if(e%2==1){
long long int temp = power(b,e/2);
return temp*temp*b;
}
else{
long long int temp = power(b,e/2);
return temp*temp;
}
}
有两个问题:
首先,您得到的是垃圾值,因为您从未调用 funzione_potenza
函数。
int main()
{
int b, e, potenza;
printf("Inserisci la base: ");
scanf("%d", &b);
printf("Inserisci l'esponente: ");
scanf("%d", &e);
potenza = funzione_potenza(b, e); // <<<<<<<<<< insert this line
printf("La potenza e' %d", potenza);
return 0;
}
其次,你甚至不需要 funzione_potenza
,它只是 pow
的包装器,你可以直接调用 pow
:
...
scanf("%d", &e);
potenza = pow(b, e);
printf("La potenza e' %d", potenza);
...
不使用内置函数也可以实现幂函数"pow"usage of "pow"-function 下面是代码
#include <stdio.h>
//function prototype
int funzione_potenza (int b, int e);
int main ()
{
int b, e, potenza;
printf("Inserisci la base: ");
scanf("%d",&b);
printf("Inserisci l'esponente: ");
scanf("%d",&e);
potenza = funzione_potenza (b,e);
printf("La potenza e' %d",potenza);
return 0;
}
int funzione_potenza (int b, int e)
{
//local variables
int i, potenza = b; //initialize potenza with b
for (i = 0; i < e; i++ )
{
potenza = potenza * e; //multiply n-number of times to get the power
}
return potenza;
}
我必须创建一个函数来 return b^e 的值。这就是我所做的:
#include<stdio.h>
#include<math.h>
int funzione_potenza (int b, int e);
int main ()
{
int b, e, potenza;
printf("Inserisci la base: ");
scanf("%d",&b);
printf("Inserisci l'esponente: ");
scanf("%d",&e);
printf("La potenza e' %d",potenza);
return 0;
}
int funzione_potenza (int b, int e)
{
int potenza;
potenza = pow(b,e);
return potenza;
}
当我 运行 它时,它会显示错误的功率值(例如 5343123) 怎么了?
我的目的是向您展示实现这一点的方式,但这基本上是重新发明轮子,因此不推荐。在这里,我展示了如何尝试编写幂函数的粗略概念。
另一种实现方式是
int mpow(int b, int e) {
if (e <= -1) {
fprintf(stderr, "mpow:(b: integer, e:non-negative integer )");
exit(1);
}
if (e == 0) return 1;
if (b == 0) return 0;
int ans = 1;
for (int i = 1; i <= e; i++) {
if (!checkIfOverflown(ans, b)) ans = ans * b;
else {
fprintf(stderr, "%s\n", "overflow in multiplication");
exit(1);
}
}
return ans;
}
作为pow
returns double
你不应该把它转换成整数(你为什么要失去精度)。
为什么要在函数中包装 pow
?可以直接使用。
我的函数正确吗?
这个函数是正确的,只要整数不会溢出东西弄乱它。对于 b
、e
的小值,它有效。
另外一种更简单有效的方法是
int mpow(int b, int e) {
int res = 1, flag = 0;
if (e <= -1) {
fprintf(stderr, "mpow:(b: integer, e:non-negative integer )");
exit(1);
}
while (e > 0) {
if (e % 2 == 1) {
if (!checkIfOverflown(res, b))
res = (res * b);
else {
flag = 1;
break;
}
}
if (!checkIfOverflown(b, b))
b = (b * b);
else {
flag = 1;
break;
}
e /= 2;
}
if( flag ){
fprintf(stderr, "%s\n", "overflow in multiplication");
exit(1);
}
return res;
}
您不需要函数来调用内置的 pow 函数。如果您正在尝试编写自己的函数,请尝试使用循环或递归构建解决方案。
假设您可以自由使用数学库,该方法将 return 正确答案,除非数字适合 "int"。否则,请考虑对更大的数字使用 "long long int"。
如果不允许您使用数学库,这里是一个正确的实现:
long long int power(int b, int e){
if(e==0){
return 1;
}
else if(e%2==1){
long long int temp = power(b,e/2);
return temp*temp*b;
}
else{
long long int temp = power(b,e/2);
return temp*temp;
}
}
有两个问题:
首先,您得到的是垃圾值,因为您从未调用 funzione_potenza
函数。
int main()
{
int b, e, potenza;
printf("Inserisci la base: ");
scanf("%d", &b);
printf("Inserisci l'esponente: ");
scanf("%d", &e);
potenza = funzione_potenza(b, e); // <<<<<<<<<< insert this line
printf("La potenza e' %d", potenza);
return 0;
}
其次,你甚至不需要 funzione_potenza
,它只是 pow
的包装器,你可以直接调用 pow
:
...
scanf("%d", &e);
potenza = pow(b, e);
printf("La potenza e' %d", potenza);
...
不使用内置函数也可以实现幂函数"pow"usage of "pow"-function 下面是代码
#include <stdio.h>
//function prototype
int funzione_potenza (int b, int e);
int main ()
{
int b, e, potenza;
printf("Inserisci la base: ");
scanf("%d",&b);
printf("Inserisci l'esponente: ");
scanf("%d",&e);
potenza = funzione_potenza (b,e);
printf("La potenza e' %d",potenza);
return 0;
}
int funzione_potenza (int b, int e)
{
//local variables
int i, potenza = b; //initialize potenza with b
for (i = 0; i < e; i++ )
{
potenza = potenza * e; //multiply n-number of times to get the power
}
return potenza;
}