测试算法,计算1到10^7的值,如果正序和倒序相同,则计算该值的2幂。
如果该值的2次幂,正序和倒序相同则打印。
Debian 操作系统上。
gcc version 4.7.2 (Debian 4.7.2-5)
Python 2.7.9
golang1.5.1
硬件部分
Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
golang优化
1.本来要用自己写幂运算。后来放弃了。
2.将字符串倒序完比较,改为每位比较,有不同则返回。
3.不用fmt打印,运行速度没有变,只是体积小了1M。
C和python没有优化。C使用-O3编译。
C代码部分:
/* # Date: 2015-11-19 # Author: simonzhang # Web: www.simonzhang.net # Email: simon-zzm@163.com # ------------------------------- */ #include#include #include #include int check(long int num) { char str[8]; sprintf(str, "%ld", num); int len = strlen(str); int a = len-1; int b = 0; for (b ; b golang代码部分:
/* # Date: 2015-11-19 # Author: simonzhang # Web: www.simonzhang.net # Email: simon-zzm@163.com # ------------------------------- */ package main import ( "strconv" ) var all int = 1E7 //1E7 = 10^7 = python 10**7 func check(num int) bool{ str:=strconv.Itoa(num) var str_len int = len(str) var a int=str_len-1 for b:=0; bpy代码部分
# -*- coding:utf-8 -*- # ------------------------------- # Date: 2015-11-19 # Author: simonzhang # Web: www.simonzhang.net # Email: simon-zzm@163.com # ------------------------------- all=xrange(1,10**7) def check(num): a=list(str(num)) b=a[::-1] if a==b: return True return False def main(): for i in all: if check(i): if check(i**2): print i,i**2 if __name__ == '__main__': main()测试结果:
golang
real 0m0.542s
user 0m0.636s
sys 0m0.044sC
real 0m0.688s
user 0m0.684s
sys 0m0.000spython
real 0m6.159s
user 0m6.140s
sys 0m0.012s结论:python体积最小,开发速度最快,运行速度慢。C体积居中,速度居中,开发难度大。golang体积大,速度快,开发难度居中。
个人还是喜欢C,能学习到最基础的计算机原理。但是golang比C还有快是没有想到的。如可以优化,请告知。
发表评论