㈠ 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