重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网络空间、营销软件、网站建设、合江网站维护、网站推广。
#include string.h
// 加法,加数与和都用字符串保存
void add(char *n1, char* n2, char *result)
{
int i, j, k, b=0;
i = strlen(n1) - 1;
j = strlen(n2) - 1;
if(i = j) k = i;
else k = j;
result[k+1] = 0; // 先假定最高位加法没有进位,加法结果仍然是k位数字
while(i = 0 j = 0) { // 从个位(最右侧)开始按位相加
result[k] = n1[i--] + n2[j--] + b - '0';
if(result[k] '9') { // 有进位
result[k] -= 10;
b = 1;
}
else b = 0; // 进位标志
k--;
}
if(i j) { // n1比n2的位数多,将多出的部分加上进位标志赋给和的高位
while(i = 0) {
result[k] = n1[i--] + b;
if(result[k] '9') {
result[k] = '0';
b = 1;
}
else b = 0; // 进位标志
k--;
}
}
else if(i j) {
while(j = 0) {
result[k] = n2[j--] + b;
if(result[k] '9') {
result[k] = '0';
b = 1;
}
else b = 0; // 进位标志
k--;
}
}
if(b == 1) { // 还有进位,所有数向右移一位,给空出来的最左侧的最高位置为一
k = strlen(result);
result[k+1] = 0;
for(i = k; i 0; i --)
result[i] = result[i-1];
result[0] = '1';
}
}
// 乘法,乘数是一个个位数,函数利用了加法运算
void mul1(char *n1, char n2, char *result)
{
int i, n, k, b=0;
k = strlen(n1);
result[k+1] = 0;
for(i=k-1; i = 0; i--) {
n = (n1[i]-'0')*(n2-'0')+b;
if(n 9) {
b = n / 10;
result[k--] = (n%10) + '0';
}
else {
b = 0;
result[k--] = n + '0';
}
}
if(b 0)
result[0] = b+'0';
else {
for(i = 1; result[i] != 0; i++)
result[i-1] = result[i];
result[i-1] = 0;
}
}
// 乘法,函数利用了乘数为个位数的乘法运算
void mul(char *n1, char *n2, char *result)
{
int i, j, l;
char t1[161], t2[161];
strcpy(result, "0");
l = strlen(n2);
for(j = l-1; j = 0; j--) {
mul1(n1, n2[j], t1);
for(i = 0; i l-j-1; i++)
strcat(t1, "0");
strcpy(t2, result);
add(t1, t2, result);
}
}
// 乘方运算,函数利用了乘法运算
void powlong(int x, int y, char *result)
{
int i;
char t1[81], t2[3];
sprintf(result, "%d", x);
for(i = 1; i y; i++) {
strcpy(t1, result);
sprintf(t2, "%d", x);
mul(t1, t2, result);
}
}
main()
{
char r[161];
int x, y;
do {
printf("输入X(1-10之间)和Y(1-20之间): ");
scanf("%d %d", x, y);
if(x 10 || x 1 || y 20 || y 1)
continue;
powlong(x, y, r);
printf("%d的%d次方=%s\n", x, y, r);
} while(x || y); // x=0 y=0时结束
}
#includestdio.h
int main(){
int x,y,i,fac=1;
int *p;
scanf("%d%d",x,y);
p=x;
for(i=1;i=y;i++)
{
fac*=*p;//计算X的Y次方
if(y==0)
fac=1;
}
printf("%d",fac);
}
int pow(int x,int y)
{
int sum=1;
for (int i=0;iy;i++)
sum*=x;
return sum;
}
#include stdio.h
int fun(int x, int y)
{
if (y == 1)
return x;
else
return x*fun(x, y - 1);
}
int main()
{
int x, y;
int sum;
scanf("%d %d", x, y);
sum = fun(x, y);
printf("%d\n", sum);
}
pow()函数用来求x的y次幂,x、y及函数值都是double型 ,其原型为:double pow(double x, double y)。
实例代码如下:
#includestdio.h
#includemath.h
void main()
{
double x = 2, y = 10;
printf("%f\n",pow(x, y));
return 0;
}
扩展资料:
C++提供以下几种pow函数的重载形式:
double pow(double X,int Y);
float pow(float X,float Y);
float pow(float X,int Y);
long double pow(long double X,long double Y);
long double pow(long double X,int Y);
使用的时候应合理设置参数类型,避免有多个“pow”实例与参数列表相匹配的情况。
其中较容易发生重载的是使用形如:
int X,Y;
int num=pow(X,Y);
这是一个比较常用的函数,但是编译器会提醒有多个“pow”实例与参数列表相匹配。
可以使用强制类型转换解决这个问题:num=pow((float)X,Y)。
参考资料来源:百度百科-POW