请大神帮忙写个函数!大整数求幂的。可以计算像2000的10次幂这么大数的函数!
答案:1 悬赏:70 手机版
解决时间 2021-12-04 09:20
- 提问者网友:黑米和小志
- 2021-12-03 17:10
请大神帮忙写个函数!大整数求幂的。可以计算像2000的10次幂这么大数的函数!
最佳答案
- 五星知识达人网友:玩家
- 2021-12-03 18:32
#include
#include
#define N 1000
// 字符串倒转,目的是将个位放在str[0],十位放在str[1]......
void TurnString(char str[])
{
int i = 0, j = strlen(str)-1;
char ch;
for( ; i < j; ++i,--j)
{
ch = str[i];
str[i] = str[j];
str[j] = ch;
}
}
void BigNumMultip(char res[], char num1[], char num2[])
{
int i, j, k;
int num[N] = {0}; // 暂存乘积之和
TurnString(num1);
TurnString(num2);
memset(res, 0, sizeof(char)*N);
for(i = 0; i < strlen(num1); ++i){
for(j = 0; j < strlen(num2); ++j){
k = (num1[i]-'0')*(num2[j]-'0');
num[i+j] += k%10; // 该位保留余数
num[i+j+1] += k/10; // 下一位进位
}
}
k = 1;
while(num[k-1]>0 || k {
num[k] += num[k-1]/10;
num[k-1] %= 10;
++k;
}
TurnString(num1); // 将数字转回来
TurnString(num2);
i = 0, k = k-1;
while(k--)
res[i++] = num[k]+'0';
res[i] = '';
}
void BigNumPow(char res[], char num[], int n)
{
char tmp[N];
strcpy(tmp, num);
while(--n)
{
BigNumMultip(res, num, tmp);
strcpy(num, res);
}
}
int main()
{
int n;
char num[N], res[N];
gets(num);
scanf("%d", &n);
BigNumPow(res, num, n);
puts(res);
return 0;
}
#include
#define N 1000
// 字符串倒转,目的是将个位放在str[0],十位放在str[1]......
void TurnString(char str[])
{
int i = 0, j = strlen(str)-1;
char ch;
for( ; i < j; ++i,--j)
{
ch = str[i];
str[i] = str[j];
str[j] = ch;
}
}
void BigNumMultip(char res[], char num1[], char num2[])
{
int i, j, k;
int num[N] = {0}; // 暂存乘积之和
TurnString(num1);
TurnString(num2);
memset(res, 0, sizeof(char)*N);
for(i = 0; i < strlen(num1); ++i){
for(j = 0; j < strlen(num2); ++j){
k = (num1[i]-'0')*(num2[j]-'0');
num[i+j] += k%10; // 该位保留余数
num[i+j+1] += k/10; // 下一位进位
}
}
k = 1;
while(num[k-1]>0 || k {
num[k] += num[k-1]/10;
num[k-1] %= 10;
++k;
}
TurnString(num1); // 将数字转回来
TurnString(num2);
i = 0, k = k-1;
while(k--)
res[i++] = num[k]+'0';
res[i] = '';
}
void BigNumPow(char res[], char num[], int n)
{
char tmp[N];
strcpy(tmp, num);
while(--n)
{
BigNumMultip(res, num, tmp);
strcpy(num, res);
}
}
int main()
{
int n;
char num[N], res[N];
gets(num);
scanf("%d", &n);
BigNumPow(res, num, n);
puts(res);
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯