🍕思想:
用数组存放对应数据的商和余数,方便计算很大的数,如4的444次方等
🍔步骤:
一.开辟一个较大的数组,数组的元素最初初始化为0,数组的最后一个元素初始化为1(或者第一个元素初始化为1,如果是第一个元素初始化为1的话,就往数组下面进位,如果是最后一位元素初始化为1,那就数组上进位)
二.进行循环计算和进位判断,循环次数为指数的大小,
对于每一轮循环:
1.遍历数组,数组的每一位元素都乘以底数
2.遍历数组,判断数组对于位置的值是否大于10,若大于则进位到数组前一个位置
三.找到数组中对于的值开始不为0处的下标,从此处开始向后打印
🍟 图解
🥩代码
计算的是a的b次方,所以外层循环由b(指数)控制,循环内部乘的是a(底数)
int main() { int arr[1000] = {0}; //用于存放计算的数据,初始化为0 arr[999] = 1; //最初:数组最后一个元素定义为1 int i = 0; int N = 0;//底数 int M = 0;//指数 printf("请输入底数:"); scanf("%d",&N); printf("请输入指数:"); scanf("%d",&M); //有1000个元素,最后一个元素下标为:999 for(i = 0 ;i < M;i++) { int j = 0; for(j = 999;j>=0;j--) { arr[j] *=N; //数组中的每一位元素都乘以底数 //最初只有数组最后一位乘了,因为其他位全为0 } for(j = 999;j>=0;j--) { //如果数组中的元素大于等于10就进位,把余数放到本身,商放到上一个位置 if(arr[j] >= 10) { arr[j-1] += arr[j]/10;//商进位到上一个位置 arr[j] = arr[j] %10;//本身位置取余数 } } } //最后遍历数组找到数组元素第一个不为0的位置 int index = 0; for (i = 0; i < 1000; i++) { if (arr[i] == 0 && arr[i + 1] != 0) { //i+1位置元素不为0 index = i + 1; break; } } //把前面的所有0不输出,从index位置开始才输出 for (i = index; i < 1000; i++) { printf("%d", arr[i]); } return 0; }
🥟注意
1.数组每个数乘底数 以及 数组每个数进行判断都是分开两个循环,遍历数组
2. arr[j-1] += arr[j]/10; 是把余数+到前一个位置,是+= 不是=