【入门】2的100次方 用pascal语言
【试题描述】2的100次方是一个很大的数,计算机无法直接计算出来,编程求该式的准确结果(从最高位到最低位每一位都要打印出来)【输入描述】无【输出描述】一行数字【输入样例】...
【试题描述】
2的100次方是一个很大的数,计算机无法直接计算出来,编程求该式的准确结果(从最高位到最低位每一位都要打印出来)
【输入描述】
无
【输出描述】
一行数字
【输入样例】
【输出样例】
【试题来源】 展开
2的100次方是一个很大的数,计算机无法直接计算出来,编程求该式的准确结果(从最高位到最低位每一位都要打印出来)
【输入描述】
无
【输出描述】
一行数字
【输入样例】
【输出样例】
【试题来源】 展开
展开全部
就像题目所说的,计算机无法直接计算出来这个数,所以要用到“高精度”这个算法。
根据题意,本题用的是乘法高精度。
高精度的原理就是把数的每一位都当作是数组中的一个元素,然后分别将数组中的每一位去乘2,再进行进位,就像小学数学中的竖式乘法一样。
以下是程序:
Program duniang;
var i,j:integer;
a:array[1..40] of integer;
begin
a[1]:=1; {2^0是1,所以将个位保存为1,其他位均是原始数据0}
for i:=1 to 100 do {因为题目要求是100次方,所以要乘100次2}
begin
a[1]:=a[1]*2; {这是为了方便之后的进位,先将第一位*2}
for j:=2 to 40 do {到40是估算一下的,因为2^10近似于10^3,所以2^100大约就是10^30多次,保险起见取40}
begin
a[j]:=a[j]*2; {让第J位*2}
a[j]:=a[j]+a[j-1] div 10; {这里的a[j-1] div 10就是看前一位有没有进位,如果a[j-1]小于10, div10之后是0;大于10,div 10之后就是十位上的数字了,这样就能起到进位的作用}
a[j-1]:=a[j-1] mod 10; {mod10 操作,不管a[j-1]大不大于10,都只取个位了,这样就起到了进位后的处理工作}
end;
end;
i:=40;
while a[i]=0 do dec(i); {找到第一个不是0的位数,这应该是这组数的最高位}
for j:=i downto 1 do write(a[j]);
end.
这是我直接在解答栏里 裸打的,没有拖到编译器里去测试,也许有些错误和问题。
讲解很到位了,如果还有不懂的,来问我就好了
根据题意,本题用的是乘法高精度。
高精度的原理就是把数的每一位都当作是数组中的一个元素,然后分别将数组中的每一位去乘2,再进行进位,就像小学数学中的竖式乘法一样。
以下是程序:
Program duniang;
var i,j:integer;
a:array[1..40] of integer;
begin
a[1]:=1; {2^0是1,所以将个位保存为1,其他位均是原始数据0}
for i:=1 to 100 do {因为题目要求是100次方,所以要乘100次2}
begin
a[1]:=a[1]*2; {这是为了方便之后的进位,先将第一位*2}
for j:=2 to 40 do {到40是估算一下的,因为2^10近似于10^3,所以2^100大约就是10^30多次,保险起见取40}
begin
a[j]:=a[j]*2; {让第J位*2}
a[j]:=a[j]+a[j-1] div 10; {这里的a[j-1] div 10就是看前一位有没有进位,如果a[j-1]小于10, div10之后是0;大于10,div 10之后就是十位上的数字了,这样就能起到进位的作用}
a[j-1]:=a[j-1] mod 10; {mod10 操作,不管a[j-1]大不大于10,都只取个位了,这样就起到了进位后的处理工作}
end;
end;
i:=40;
while a[i]=0 do dec(i); {找到第一个不是0的位数,这应该是这组数的最高位}
for j:=i downto 1 do write(a[j]);
end.
这是我直接在解答栏里 裸打的,没有拖到编译器里去测试,也许有些错误和问题。
讲解很到位了,如果还有不懂的,来问我就好了
展开全部
高精度乘法,用数组存储,每位乘2,取模10放入下一位,计数器加一,反复一百次,即可。
程序要自己写自己想,上网求人是没用的。
程序要自己写自己想,上网求人是没用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
const max=10000;
var n,i,j,h:integer;
a:array[1..10001]of integer;
begin
fillchar(a,sizeof(a),0);
a[1]:=1;
for i:=1 to 100 do
begin
for j:=1 to max do
a[j]:=a[j]*2;
for j:=1 to max do
begin a[j+1]:=a[j+1]+a[j] div 10;
a[j]:=a[j] mod 10;end;
end;
i:=max;
while a[i]=0 do
i:=i-1;
for j:=i downto 1 do
write(a[j]);
end.
var n,i,j,h:integer;
a:array[1..10001]of integer;
begin
fillchar(a,sizeof(a),0);
a[1]:=1;
for i:=1 to 100 do
begin
for j:=1 to max do
a[j]:=a[j]*2;
for j:=1 to max do
begin a[j+1]:=a[j+1]+a[j] div 10;
a[j]:=a[j] mod 10;end;
end;
i:=max;
while a[i]=0 do
i:=i-1;
for j:=i downto 1 do
write(a[j]);
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
program ling;
const max=10000;
var n,i,j,h:integer;
a:array[1..10001]of integer;
begin
fillchar(a,sizeof(a),0);
a[1]:=1;
for i:=1 to 100 do
begin
for j:=1 to max do
a[j]:=a[j]*2;
for j:=1 to max do
begin a[j+1]:=a[j+1]+a[j] div 10;
a[j]:=a[j] mod 10;end;
end;
i:=max;
while a[i]=0 do
i:=i-1;
for j:=i downto 1 do
write(a[j]);
end.
const max=10000;
var n,i,j,h:integer;
a:array[1..10001]of integer;
begin
fillchar(a,sizeof(a),0);
a[1]:=1;
for i:=1 to 100 do
begin
for j:=1 to max do
a[j]:=a[j]*2;
for j:=1 to max do
begin a[j+1]:=a[j+1]+a[j] div 10;
a[j]:=a[j] mod 10;end;
end;
i:=max;
while a[i]=0 do
i:=i-1;
for j:=i downto 1 do
write(a[j]);
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
高精度运算
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询