初中pascal编程题

回文数字提交文件输入文件输出文件时限huiwen.pashuiwen.inhuiwen.out1s【问题描述】数学老师在课堂上出了一个奇怪的题目若一个数(首位不为零)从左... 回文数字提交文件输入文件输出文件时限huiwen.pashuiwen.inhuiwen.out1s【问题描述】 数学老师在课堂上出了一个奇怪的题目若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。  又如:对于10进制数87:  STEP1:87+78 = 165         STEP2:165+561 = 726  STEP3:726+627 = 1353        STEP4:1353+3531 = 4884  在这里的一步是指进行了一次10进制的加法,上例最少用了4步得到回文数4884。写一个程序,给定一个10进制数M,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”Zzc由于这几天刚好感冒,发烧,头痛得厉害,实在不能动脑筋了,就来拜托你了。输入格式:一行一个正整数m输出格式:一行第一行为经过的步数或“Impossible!”样例输入:87样例输出:4注:对于70%的输入数据,1<=m<=maxlongint 对于100%的输入数据,m的长度小于等于100位 展开
 我来答
匿名用户
2013-10-17
展开全部
高精度 ..跟楼上的一样00...var
a, b : array[0 .. 1000]of longint;
n, i, j : longint;
function check : boolean;
var i : longint;
begin
for i := 1 to a[0] div 2 do
if a[i] <> a[a[0] - i + 1] then exit(false);
exit(true);
end;
begin
readln(n);
while n > 0 do begin inc(a[0]); a[a[0]] := n mod 10; n := n div 10; end;
if check then begin writeln('0'); halt; end;
for i := 1 to 30 do begin
for j := 1 to a[0] do
b[j] := a[a[0] - j + 1];
for j := 1 to a[0] do
begin
a[j] := a[j] + b[j];
a[j + 1] := a[j + 1] + a[j] div 10;
a[j] := a[j] mod 10;
end;
if a[a[0] + 1] > 0 then inc(a[0]);
if check then begin writeln(i); halt; end;
end;
writeln('Impossible!');
end.
匿名用户
2013-10-17
展开全部
该题含有多组测试数据。
每组测试数据为一整数n (1<=n<=maxlongint)

Output

输出1~n中有多少个自然数可以作为Pascal数字

Sample Input

10

Sample Output

9
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式