您的位置:首页 > 编程语言 > C语言/C++

C语言,用数组实现结果为100000位内的大整数幂运算。

2017-12-29 16:27 447 查看
C语言,用数组实现结果为100000位内的大整数幂运算。

在此给出源代码,复制粘贴后即可运行。

可以稍作修改然后封装作为一种运算函数。

/*本程序在使用简化运算的情况下可以用于保存2的32位的数;

如果不用简化算法,可以处理2的32位的2的32位次幂

当进行程序嵌套后,应该会大大提高存储的能力。

主要的问题在于计算机算不出来。。。

程序缺陷在于 对底数和指数有限制 */

(如果有时间,将会继续更新,因为使用int 花费比较大,也可以考虑用其他的方法解决)。

注:goto 语句不符合编程的思想的,不建议打开。但也可以自行打开,这样可以方便的多次运行测试。

#include <stdio.h>
#include<stdlib.h>

int main()
{     //幂运算

//START:;
int j, i, A, B, C;
/*int i;
int A;
int B;
int C;*/
printf("*************************************\n");
printf("本程序适用于结果为100000位内的幂运算。\n请输入底数:\n");
int n = 1;
scanf_s("%d", &n);
printf("请输入指数:\n");
int m = 0;
scanf_s ("%d", &m);
int l = 0;
C = n;
do {
C = C / 10;
l++;
} while (C != 0);
int w = l * m;//减少运算量,准备做if
printf("最多有%d位数。\n", w);
int a[100000] = { 0 };
a[99999] = 1;
for (j = 1; j <= m; j++) {
B = 0;
// A=0;
if (w<100000) {
for (i = 99999; i>w - 1; i--) {
A = a[i] * n + B;
a[i] = A % 10;
B = A / 10;
}
}
else {
for (i = 99999; i >= 0; i--) {
A = a[i] * n + B;
a[i] = A % 10;
B = A / 10;
}
}
}
if (a[0]) {
printf("结果超出100000位。\n数据有可能溢出,请扩大可操作范围后使用。\n");
};
int k = 0;
do {
k++;
} while (a[k] == 0);
//printf ("%d\n",a[k]);
printf("\n");
for (i = k; i<100000; i++) {
printf("%d", a[i]);
}
printf("\n结果共有%d位数.\n", (100000 - k));
system("pause");
//goto START;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐