当前位置:首页 » 编程语言 » 求高精度幂c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

求高精度幂c语言

发布时间: 2022-07-05 02:18:32

c语言有关快速幂的问题

type
arrty=array[1..10000] of longint;
var
n,mn,len,lenm,i,mnl:longint;
a,m:arrty;
procere mxm;
var
c:arrty;
i,j:longint;
begin
fillchar(c,sizeof(c),0);
for i:=1 to lenm do
for j:=1 to lenm do
begin
inc(c[i+j-1],m[i]*m[j]);
inc(c[i+j],c[i+j-1] div 10);
c[i+j-1]:=c[i+j-1] mod 10;
end;
lenm:=lenm+lenm+1;
while (lenm>1) and (c[lenm]=0) do
dec(lenm);
for i:=1 to lenm do
m[i]:=c[i];
end;
procere axm;
var
c:arrty;
i,j:longint;
begin
fillchar(c,sizeof(c),0);
for i:=1 to len do
for j:=1 to lenm do
begin
inc(c[i+j-1],a[i]*m[j]);
inc(c[i+j],c[i+j-1] div 10);
c[i+j-1]:=c[i+j-1] mod 10;
end;
len:=len+lenm+1;
while (len>1) and (c[len]=0) do
dec(len);
for i:=1 to len do
a[i]:=c[i];
end;
begin
fillchar(a,sizeof(a),0);
readln(mn,n);
mnl:=mn;
len:=0;
while mnl>0 do
begin
inc(lenm);
m[lenm]:=mnl mod 10;
mnl:=mnl div 10;
end;
a[1]:=1;
len:=1;
while n>0 do
begin
if n mod 2=1 then
axm;
n:=n div 2;
mxm;
end;
for i:=len downto 1 do
write(a[i]);
writeln;
end.

㈡ 高精度问题,C语言,求二的n次方

//自己一个一个代码敲的,希望对题主有用
intmain()
{
intnum=1000;
charret[1000];
intN;
intretLength;
while(scanf("%d",&N)&&N>=0)
{
memset(ret,-1,sizeof(ret));
ret[0]=1;
retLength=0;
if(0==N)
{
printf("%d ",1);
continue;
}
else
{
for(inti=0;i<N;++i)
{
charisCarry=0;
intj=0;
for(j=0;j<num;++j)
{
if(-1==ret[j])
{
break;
}
//模拟乘2过程
ret[j]*=2;
ret[j]+=isCarry;
if(ret[j]>=10)
{
isCarry=1;
ret[j]%=10;
}
else
{
isCarry=0;
}
}
//一轮模拟乘2结束,判断是否还有进位,
//如果有进位,则在下位赋值为1
if(1==isCarry)
{
ret[j++]=1;
isCarry=0;
}
//最后一次模拟需要保存,总共计算了的长度。
if(i==N-1)
{
retLength=j;
}
}
//最后格式化输出,50次一个换行,
//注意计算结果保存是逆序。如2^10的保存结果为4201
for(inti=0;i<retLength;++i)
{
printf("%c",ret[retLength-i-1]+'0');
if(0==(i+1)%50)
{
printf(" ");
}
}
}
printf(" ");
}
return0;
}

㈢ C语言求高精度N!问题

#include <stdio.h>
long int fun(int n)
{
if (n == 1) return 1;
else return (n*fun(n-1));//递归函数求阶乘
}
int main()
{
int x;
scanf("%d", &x);
printf("%ld\n", fun(x));//输出x!的值
return 0;
}

// 比如输入4,输出:fun(4) 进入函数:
// fun(4): 4!=1 返回4×fun(3)
// fun(3): 3!=1 返回3×fun(2)
// fun(3): 2!=1 返回2×fun(1)
// fun(3): 1==1 返回1

//然后整个程序返回:4×3×2×1

㈣ 高精度次方的C语言编程怎么弄

使用pow函数 如果是整形数据建议使用long int型 记得加math.h头文件 希望能帮到你

㈤ C语言,高精度求2的N次方、求详细指点

N是整数么?如果不是整数或者对精度要求不是特别特别高就用pow函数,一般来说足够了。如果N是整数而又对精度要求很高,那么可以用数组,将每一位存在一个数组元素中,根据N的次数逐次乘以2然后更新数组元素。

㈥ c语言 高精度n^n乘方

#include <math.h>

void main()
{
double a;
a=pow(2,3); // 2的立方赋予a
}

㈦ C中如何能计算高精度的幂运算,例如3.242342的5次方如何能输入高精度的结果,起码要精确到后面8位

将变量定义为double型,输出结果是标明输出几位小数(如printf("%.9lf",a)这样结果输出到小数点后8位),不标明默认小数点后6位

㈧ C语言高精度幂计算

这个只能建立一个数组

㈨ c语言程序题!求思路!怎样用数组实现高精度运算,比如求1.0310的20次方的精确值

转成整型的vector,然后把小数点的位数放到另外一个int型变量里,这样就简化为整型数(在vector中的运算)和小数点的位数的add了.
等计算万完了,vector最后有几个0,位数的整型就sub几.然后输出就好了.

㈩ c语言数组求幂谢谢

#include<stdio.h>
#include<string.h>
int poll(int a,int b)
{
int i,s=1;
for(i=1;i<=b;i++)
s=s*a;
return s;
}//自定义的求幂函数
int main()
{
int i,j,k,l,n,m;
int t;
char a[100];
int poll(int a,int b);
while(scanf("%d %s",&n,a)!=EOF)//输入
{
t=0;
l=strlen(a)-1;
printf("%d\n%s\n",n,a);//将输入输出
for(i=0;a[i]!='\0';i++)//转换过程
{
if(n!=16)
{
t=t+(a[i]-'0')*poll(n,l);
l--;
}
else
{

if(a[i]>='A'&&a[i]<='f')
t=t+(a[i]-'A'+10)*poll(n,l);
else
t=t+(a[i]-'0')*poll(n,l);
l--;
}
}
printf("%d\n",t);//所求的结果
}
}
这个代码没有问题,不懂的话,在问我吧
其中n就是2或8或16,也可以是别的数,而a[]就是与n相对应的进制数
下面是输入输出样例
2 10101010110
2
10101010110
1366
8 777777777
8
777777777
134217727
16 F08F89FAD
16
F08F89FAD
150511533