#include <stdio.h>
int main() {
double base; // 底数(支持小数、正数、负数)
int exponent; // 指数(整数,支持正/负/0)
double result = 1.0; // 初始值1.0:乘法单位元,天然支持非零数的0次方
int i;
int is_negative_exp = 0; // 标记是否为负指数
// 提示输入底数和指数
printf("请输入底数:");
scanf("%lf", &base);
printf("请输入整数指数(支持正数/负数/0):");
scanf("%d", &exponent);
// 新增:处理0的0次方(数学上未定义,优先拦截)
if (base == 0.0 && exponent == 0) {
printf("错误:0的0次方在数学上未定义,无意义!\n");
return 1; // 异常退出,避免后续无效计算
}
// 步骤1:处理负指数——标记后取绝对值,统一转为正指数计算
if (exponent < 0) {
is_negative_exp = 1;
exponent = -exponent; // 取指数绝对值
}
// 步骤2:循环累乘——计算base的|exponent|次方
for (i = 0; i < exponent; i++) {
result *= base;
}
// 步骤3:负指数兜底——对正指数结果取倒数(已补全缺失的闭合花括号)
if (is_negative_exp == 1) {
// 校验:避免0的负指数(数学无意义,除以0错误)
if (result == 0.0) {
printf("错误:0的负指数无数学意义!\n");
return 1;
}
result = 1.0 / result; // 负指数等价于正指数结果的倒数
} // 补全此处缺失的闭合花括号,修复语法错误
// 还原原始指数,格式化输出结果
int original_exponent = is_negative_exp ? -exponent : exponent;
printf("%.2lf 的 %d 次方 = %.4lf\n", base, original_exponent, result);
return 0;
}