Pascal:范围内的数字总和

时间:2013-12-19 09:19:55

标签: pascal lazarus

少于1000的正整数有多少等于6的数字?

不知道如何使用Pascal开始这个。在Python上,我的脚本看起来像:

a = 1
b = 1000
for i in range(a,b):
........

我不知道如何访问数字。如果有人能给我一个提醒,我应该能够从这里取得一些进展。

3 个答案:

答案 0 :(得分:2)

您的问题基本上只是“如何在Pascal中完成for循环”...只需查看文档,例如在这里:http://pascal-programming.info/lesson4.php#JUMP3

我也闻到了作业。 ;)

答案 1 :(得分:1)

忽略关于Pascal的讽刺评论(它仍然是一种可行的语言,并且是Delphi的核心;它的语法已被借用于几种'现代'语言),这个问题实际上比人们想象的要复杂得多。首先,我将展示该计划,然后我会解释。

var
 i, j, found, total: integer;
 s: string;

begin
 found:= 0;  // how many numbers whose digits add up to six
 for i:= 1 to 1000 do
  begin
   s:= inttostr (i);
   total:= 0;
   for j:= 1 to length (s) do
    total:= total + ord (s[j]) - ord ('0');
   if total = 6 then found:= found + 1;
  end;
 writeln ('I found ', found, ' numbers whose digits add up to six');
 readln
end.

关键是将索引号(i)转换为字符串(即'inttostr(i)'行),然后迭代字符串的数字并对它们求和。

答案 2 :(得分:0)

这是解决方案,没有不必要的转换为字符串。它的工作原理是获取最右边的数字,将其值添加到累加器Total,然后通过执行整数除以10来移除最右边的数字,并重复该过程直到我们什么都没有留下。

var
  Value, Digit, Total, NumValues: Integer;
  i: Integer;
begin
  NumValues := 0;

  for i := 1 to 1000 do
  begin
    Value := i;
    Total := 0;

    repeat
      Digit := Value mod 10;
      Total := Total + Digit;
      Value := Value div 10;
    until Value = 0;

    if Total = 6 then
      Inc(NumValues);
  end;

  WriteLn ('I found ', NumValues, ' numbers whose digits add up to six');
  ReadLn;
end.