C语言pow函数

这是我编的,题目是“编写一函数,参数是一个十六进制数字符串返回结果是相应的十进制数。”可以运行,只是运算有错。如输入a05,算出的就不是2565.求C语言大神帮我看看哪里错了。
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 10
int function(char a[])
{
int i,c,sum=0;
c=strlen(a);
for(i=0;i<c;i++)
{
if('A'<=a[i]&&a[i]<='E')
a[i]=a[i]-55;
else if('a'<=a[i]&&a[i]<='e')
a[i]=a[i]-87;
else if(1<=a[i]&&a[i]<=9)
a[i]=a[i];
}
for(i=0;i<c;i++)
sum=sum+a[i]*pow(16,c-1-i);
return sum;
}
main()
{
char a[N];
printf("Please input a string:\n");
gets(a);
printf("%d\n",function(a));
}

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
#define N 10
int function(char a[])
{
int i,c,sum=0;
int b[N];
c=strlen(a);
for(i=0;i<c;i++)
{
if('A'<=a[i]&&a[i]<='E')
b[i]=a[i]-55;
else if('a'<=a[i]&&a[i]<='e')
b[i]=a[i]-87;
else
b[i]=a[i]-48;//因为char类型的数字0对应十进制的48,这下你就懂了吧!!!
}
cout<<endl;
for(i=0;i<c;i++)
sum=int(sum+b[i]*pow(16,c-1-i));
return sum;
}
main()
{
char a[N];
printf("Please input a string:\n");
gets(a);
printf("%d\n",function(a));
return 0;
}

你可以试一下子,我已经再改的地方做了注释,而且,必须将char类型数字改成int型的数字,否则会产生不确定的错误!!!希望满意,给分啊亲!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-08

pow函数是C语言的一个库函数。


函数原型:double pow(double x, double y);

功       能:计算x^y

返 回  值:计算结果


举例如下:

double x = 3.14, y=2, z;
z = pow(x, y); // 计算x^y,即3.14的平方

注:使用pow函数的时候,需要将头文件#include<math.h>包含进源文件中。

第2个回答  2014-03-31

VC调试,已改,更改位置见程序中相应的注释部分:

#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 10
int function(char a[])
{
 int i,c,sum=0;
 c=strlen(a);
 for(i=0;i<c;i++)
{
 if('A'<=a[i]&&a[i]<='E')
 a[i]=a[i]-55;
 else if('a'<=a[i]&&a[i]<='e')
 a[i]=a[i]-87;
 else if('0'<=a[i]&&a[i]<='9')//1.应为字符比较,给数字加上单引号;2.范围应为(0~9),原程序未考虑0
 a[i]=a[i]-48; //此处应减去'0'的ASCII码值(48)
}
for(i=0;i<c;i++)
 sum=sum+a[i]*(int)pow(16,c-1-i); //pow返回值为double类型,这里强转一下
return sum;
}
void main()
{
 char a[N];
 printf("Please input a string:\n");
 gets(a);
 printf("%d\n",function(a));
}

本回答被提问者采纳
第3个回答  2014-03-31
输入是数字时,应该当成字符处理:
else if('0'<=a[i]&&a[i]<='9')
a[i]=a[i]-48;
第4个回答  2015-06-08

C98标准原型:

double pow (double base, double exponent);
float pow (float base, float exponent);
long double pow (long double base, long double exponent);
double pow (double base, int exponent);
long double pow (long double base, int exponent);

头文件:

#include <math.h>

功能:计算base的exponent次幂。
说明:base应大于零,返回幂指数的结果。
 举例:

// pow.c 
#include <stdio.h> 
#include <math.h> 
int main() 
{
    printf("4^5=%f",pow(4.,5.)); 
    getchar(); 
    return 0; 
}

相似回答