回 帖 发 新 帖 刷新版面

主题:请老师和学长们赐教:PASCAL题解

三次方求和
       给你一个三位数,你要对这个三位数的各位数字的3次方求和,然后再对求出的和中各位数字的3次方求和,如此一直继续下去,判断最后能否得到一个不再变化的固定值。如能得到一个固定值,就告诉我这个固定值;如果不能,则告诉我提示信息“error”。注意了,在求解过程中,若某一次求和得到的值超过3位数,则取该数的低三位继续往下运算……
例如:对于三位数111,则第一次计算应该是1×1×1 + 1×1×1 + 1×1×1=3。第二次应是0×0×0 + 0×0×0 + 3×3×3=27。第三次应是0×0×0 + 2×2×2 + 7×7×7=351。第四次应是3×3×3 + 5×5×5 + 1×1×1=153。第五次应是1×1×1 + 5×5×5 + 3×3×3=153,与第四次结果重合,不再计算,输出固定值153。

输入:一行,一个三位数N(100≤N≤999)。

输出:一行,如能得到一个固定值,则输出这个固定值;如不能,输出提示信息“error”。

样例1:
输入:(cubsum.in)
111

输出:(cubsum.out)
153
样例2:
输入:
102

输出:
error
0

回复列表 (共3个回复)

沙发

program p_116;
var n,i,x,y,a,b,c,t,j:integer;
begin
 readln(n);
  a:=n div 100;
  b:=(n-a*100) div 10;
  c:=n mod 10;
 for i:=1 to 10000 do
  begin
  x:=a*a*a+b*b*b+c*c*c;
  t:=x mod 1000;
  y:=x mod 1000;
  a:=y div 100;
  b:=(y-a*100) div 10;
  c:=y mod 10;
  j:=(a*a*a+b*b*b+c*c*c) mod 1000;
  if t=j then
   begin
   writeln(t);
   break;
   end;
 end;
 if t<>j then
   writeln('error');
end.

板凳

像你这种问题,建议你去问问堂在线咨询一下,或者到任务大厅发个任务,会有相关专业人事为你解答的。
问问堂成立于2010年,致力于打造中国领先的在线咨询交易平台。问问堂开设有健康、法律、心理、星座、命理、教育、创业、电脑数码、婚嫁、房产等等360行共31个一级分类,198个二级分类,1500余个三级分类,同时开设有问问堂任务大厅,力求使中国人足不出户解决一切烦恼。

3 楼

广告的去死

我来回复

您尚未登录,请登录后再回复。点此登录或注册