【发布时间】:2021-03-10 19:26:21
【问题描述】:
我是 Crystal 新手,我正在尝试将以下程序翻译成 Crystal:
#include <stdio.h>
long rev(long n) {
long m = 0;
while (n > 0) {
m = 10*m + n%10;
n = n/10;
}
return(m);
}
int main() {
for(int n=1; n<=10000000; n++) {
long m = n*rev(n);
if (m==rev(m))
printf("%d\n", n);
}
}
我写了水晶程序
def rev(n : UInt64) : UInt64
m : UInt64 = 0
while n > 0
m = 10_u64*m + n%10_u64
n = n//10
end
m
end
(1_u64 .. 10_000_000).each { |n|
m = n*rev(n)
if m == rev(m)
print(n,"\n")
end
}
我发现奇怪的是,为了编译,在某些时候我必须指定文字的类型 (n%10_u64),但在其他时候不需要 (n//10)。是我遗漏了什么还是只是 Crystal 在选角方面不一致?
另外,我想知道,这是一个很好的 c 程序翻译还是一个有经验的 Crystal 程序员会怎么做?
【问题讨论】:
标签: casting crystal-lang