用Pascal計算a b的精確值,設a,b以一般整數輸入,計算結果精確到小數後20位

2022-02-25 20:28:58 字數 6073 閱讀 9272

1樓:嘯嘯_飛

精度最大的extended和comp也正好20位,但是如果整數部分不止1位,就麻煩了,用高精解決吧

2樓:潛爾藍

這個是高精度計算問題

小學的長除法會吧 就讓計算機按照這個步驟就行

用pascal計算a/b的精確值,設a,b是一般整數,計算機可以接受的數,精確小數後20位

3樓:匿名使用者

varpos:array[1..50] of integer;

s:array[1..35] of integer;

len,st,x,y,i:integer;

begin

fillchar(s,sizeof(s),0);/*小數部分初始化*/

fillchar(posi,sizeof(posi),0); /*小數值的位序列初始化*/

len:=0;st:=0; /*小數部分的指標和迴圈節的首指標初始化*/

read(x,y); /*讀被除數和除數*/

write(x div y); /*輸出整數部分*/

x:=x mod y; /*計算x除以y的餘數*/

if x=0 then exit;/*若x除盡y,則成功退出*/

while len<20 do /*若小數位未達到上限,則迴圈*/

begin

inc(len);

posi[x]:=len;/*記下當前位小數,計算下一位小數和餘數*/

x:=x*10; s[len]:=x div y;x:=x mod y;

if posi[x]<>0 /*若下一位餘數先前出現過,則先前出現的位置為迴圈節的開始*/

then begin st←posi[x]; break;end;/*then}

if x=0 then break; /*若除盡,則成功退出*/

end;/*while*/

if len=0

then begin writeln;exit;end; /*若小數部分的位數為0,則成功退出;否則輸出小數點*/

write('.');

if st=0 /*若無迴圈節,則輸出小數部分,否則輸出迴圈節前的小數和迴圈節*/

then for i:=1 to len do write(s[i])

else begin for i:=1 to st-1 do write(s[i]);

write('(');

for i:=st to len do write(s[i]);

write(')');

end;/*else*/

end.

怎樣用pascal高精度運算求a/b 的精確值?要求精確到小數點後20位

free pascal輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點後c位。a,b<=10^6,c<=100

4樓:

var a,b:real;c:longint;

begin

readln(a,b,c);

if c=0 then begin

writeln(a/b:0:0);exit;

end;

write(trunc(a/b));

a:=a-trunc(a/b)*b;

write('.');

while c>1 do begin

a:=a*10;

write(trunc(a/b));

dec(c);

a:=a-trunc(a/b)*b;

end;

a:=a*10;

writeln(round(a/b));

end.

逐漸執行除法(模擬)。

我說樓上的怎麼這麼不負責任,pascal除法的精度根本沒有100位,直接加:0:c輸出不了20個小數,只有17位,何談100位。真是可悲。

5樓:匿名使用者

program ex;

vara,b:longint;

c:1..100;

begin

readln(a,b,c);

writeln(a/b:0:c);

end.

超簡潔的

選我吧易懂

解釋:writeln(a/b:0:c);

a/b:代表a/b的值

:c保留c位小數

注意::0與:c位置不能掉轉。

(其實:0我還不知道是什麼意思呢)

我發現如果不加:0就會變成科學計數法了...

加了:0才能轉化成正常小數

6樓:匿名使用者

vara,b:longint;

c:shortint;

begin

readln(a,b,c);

writeln(a/b:0:c);

end.水題

7樓:

程式(pascal):

vara,b:longint;

c:integer;

d:real;

begin

read(a,b,c); readln;

d:=a/b;

writeln(d:0:c);

end.

8樓:匿名使用者

你還是看4樓的吧,這題就坑在精度控制!

我學c++的,正好寫了這題

#include

#include

using namespace std;

int main()

;iz=a/b;

iy=a%b;

for(int i=1;i<=c+1;i++)else

}//處理四捨五入

c1=c;

if(store[c1+1]>=5)

else break;} }

//輸出控制

cout<

for(int i=1;i<=c;i++)cout<

cout<<(double)clock()/clocks_per_sec;

system("pause");}

(用pascal語言)求兩個整數的最小公倍數,輸入整數a,b,輸出a,b的最小公倍數(全過程)

9樓:匿名使用者

vara, b: integer;//兩個整bai數du

res: integer;//最小公倍數zhibegin

readln(a);//讀取第一個整數

readln(b);//讀取第二個整數

res := b;//認為最小公倍數的起始值dao為bif a > b then

res := a;//如果a>b, 那麼最小公倍數起始值為arepeat

inc(res);//res遞加

until (res mod a = 0) and (res mod b = 0);//是最小公倍數就退出

writeln(res);//輸出最小公倍數readln;

end.//附上執行截圖

10樓:匿名使用者

varm,n,b:integer;

begin

readln(m,n);

if m>n then b:=m

else b:=n;

while not ((b mod n=0)and(b mod m=0)) do inc(b);

writeln(b);

readln;

end.

11樓:匿名使用者

我不會pascal,就用c++試下吧,讓後面高手來#includeusing namespace std;int main( )cout<<"最大公約數為:"<倍數為:"<這隻能專算是一種演算法吧,屬,,,不好意思了

12樓:匿名使用者

var m,n,r,a,b:int64;

begin

readln(m,n);//(輸入兩制

個數);

a:=m;

b:=n;

r:=m mod n;

while r<>0 do(用輾轉法求最大公約數);

begin

m:=n;

n:=r;

r:=m mod n;

end;

write(a*b div n);(利用m*n=(m,n)*[m,n]);

end.

請用pascal語言編寫程式7、乘法計算器:程式設計由鍵盤輸入兩個整數a和b,計算並輸出它們的乘積。

13樓:匿名使用者

vara,b:longint;

begin

readln(a,b);

writeln(a*b);

end.

14樓:匿名使用者

var a,b:int64;begin readln(a,b); writeln(a*b);end.

15樓:匿名使用者

program aa;var a,b:integer; c:longint; read(a,b);c:=a*b;write(c);end.

16樓:匿名使用者

對方法沒有要求?高精度或者什麼?

pascal程式設計:輸入兩個整數a,b,輸出它們的和(a,b<=10^9)

17樓:聽不清啊

var a,b:longint;

begin

readln(a,b);

writeln(a+b)

end.

用pascal,求a/b的高精度值

18樓:匿名使用者

var a,b,l,i,j:longint;

hash:array[1..100000]of boolean;

p,p1:array[0..100000]of longint;

s:ansistring;

begin

readln(a,b);

if a mod b=0 then begin writeln(a div b,'.',0);exit; end;

str(a div b,s);s:=s+'.';

a:=a mod b;

fillchar(hash,sizeof(hash),false);

l:=0;

p[0]:=a;

hash[a]:=true;

while a<>0 do

begin

a:=a*10;

inc(l);

p1[l]:=a div b;

a:=a mod b;

p[l]:=a;

if hash[p[l]] then break

else hash[p[l]]:=true;

end;

if a=0 then begin write(s); for i:=1 to l do write(p1[i]); end

else begin

for i:=0 to l-1 do

if p[i]=p[l] then break;

for j:=1 to i do s:=s+chr(p1[j]+48);

s:=s+'(';

for j:=i+1 to l do

s:=s+chr(48+p1[j]);

s:=s+')';

while length(s)>76 do

begin

writeln(copy(s,1,76));

delete(s,1,76);

end;

writeln(s);

end;

end.

順便打出迴圈節!

pascal 的初級題

計算6階pascal矩陣的特徵值和特徵向量Matlab程式

v,d eig pascal 6 設計演算法 計算六階矩陣的特徵值.即實現matlab中的eig 功能 要自己做的話,這就是一個數值計算求特徵值的問題了,找一本計算方法看看 要不然可以使用矩陣分解的命令,比如jordan schur 分解後得到的矩陣的對角元就是特徵值,你提取出來就是了。有沒有大神能...

spss怎麼計算p值,怎樣用SPSS計算P值

獵天使魔女這款 的設計靈感源於日本著名的一款動作,冒險類遊戲獵天使魔女中的女主角貝姐,遊戲中的背景,可是大眾女神的形象啊,不僅樣子炫酷,身材還非常的 但是英雄聯盟中獵天使魔女這款 可謂是毀經典呀。遊戲模型很醜,但是這也不能怪模型師,畢竟原畫也就畫成那個樣子了,雖然說手感還行,沒有特效也就算了,醜成這...

已知ab7,ab3,求下列各式的值。1ab2ab

解 a b 2 7得 a2 b2 2ab 7 1 內 a b 2 3得a2 b2 2ab 3 2 1 1 2得 容2ab 2ab 7 3 4ab 4 ab 1 2 1 2得 a2 b2 a2 b2 10 a2 b2 5 將 a b 2 7展開得 a2 b2 2ab 7,將 a b 2 3得專a2 b...