用pascal编写程序 如果一个4位数等于它的每一位数字4次方之和,则称为玫瑰花数,求所有的玫瑰花数。

用pascal编写程序如果一个4位数等于它的每一位数字4次方之和,则称为玫瑰花数,求所有的玫瑰花数。... 用pascal编写程序
如果一个4位数等于它的每一位数字4次方之和,则称为玫瑰花数,求所有的玫瑰花数。
展开
 我来答
BGHnnb
推荐于2017-12-16 · TA获得超过276个赞
知道小有建树答主
回答量:140
采纳率:50%
帮助的人:121万
展开全部

程序:

var

  i,k,x:longint;

begin

  for i:=1000 to 9999 do//枚举所有的四位数,因为玫瑰花数一定是四位数

    begin

      k:=0;

      x:=i;

      while x>0 do

        begin

          k:=k+sqr(sqr(x mod 10));//这里可能太快了。这样子,设n表示目前x的各位,则n的四次方为n*n*n*n,而sqr为求平方数,所以sqr(sqr(n))=sqr(n*n)=n*n*n*m。将结果累加到k上比较

          x:=x div 10;//截去当前的个位

        end;//以上为求该数每一位数字4次方之和,扫描就是从个位到千位的顺序

      if k=i then writeln(i);//相等就输出

    end;

end.

输出应该是这样,不懂再追问

追问
一、i,k,x分别代表什么?
二、不是要每一位的数字4次方之和嘛,为什么只算个位呢?
三、k:=0; x:=i; 是什么意思?为什么要这样赋值?
四、while x>0 do 是什么意思?
(麻烦解答一下,答完后采纳。谢谢)
你很厉害,如果可以请帮我解答一下此题:
输入一个4位整数,将其十位和千位上的数字对调后输出。(输入:1234 输出:3214)
用pascal 编写程序
追答
一、i表示当前正在判断的数
k表示它的每一位数字4次方之和
x表示正在处理的数经过若干次截取末尾后的数

二、其实并不是只算个位,细细分析,你会发现
while x>0 do
begin
write(x mod 10)
x:=x div 10;
end;
就是从右往左分别输出x的每一位!上机试试看

三、如果k不等于0,那么这时k就是上一次求值的值!再次求值之后就变成了两次求值结果的和!只有赋为0才能保证从0开始累加,结果正确。
x赋为i,因为i是循环变量,不能再次在循环内改变,不然就会发生错误!不信上机试试看

四、联系 二 即可,就是x是否被截完。

慢慢体会吧,直到有一天你会明白的

其实这道题目用字符串解决更加简单,就是读入一个字符串,然后把它的第三位先输出,然后输出第二位,然后输出第一位,最后输出第四位
var
s:string;
begin
readln(s);
writeln(s[3],s[2],s[1],s[4]);//s[i]表示字符串s的第i位,你可以把字符串看成是一个类型为字符的数组
end.
猎火电脑工作室
2014-02-11
知道答主
回答量:17
采纳率:0%
帮助的人:17.7万
展开全部
for i:=1000 to 9999 do
begin
g:=i mod 10;
s:=i div 10 mod 10;
b:=i div 100 mod 10;
q:=i div 1000;
if g*g*g*g+s*s*s*s+b*b*b*b+q*q*q*q=i then writeln(i);
end;
这样更容易理解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式