用pascal编写程序 如果一个4位数等于它的每一位数字4次方之和,则称为玫瑰花数,求所有的玫瑰花数。
用pascal编写程序如果一个4位数等于它的每一位数字4次方之和,则称为玫瑰花数,求所有的玫瑰花数。...
用pascal编写程序
如果一个4位数等于它的每一位数字4次方之和,则称为玫瑰花数,求所有的玫瑰花数。 展开
如果一个4位数等于它的每一位数字4次方之和,则称为玫瑰花数,求所有的玫瑰花数。 展开
2个回答
展开全部
程序:
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.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询