golang 1.5.1 和C语言 python 学习对比

  测试算法,计算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; b

py代码部分

# -*- 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.044s

C
real 0m0.688s
user 0m0.684s
sys 0m0.000s

python
real 0m6.159s
user 0m6.140s
sys 0m0.012s

结论:python体积最小,开发速度最快,运行速度慢。C体积居中,速度居中,开发难度大。golang体积大,速度快,开发难度居中。
个人还是喜欢C,能学习到最基础的计算机原理。但是golang比C还有快是没有想到的。如可以优化,请告知。

源码

发表评论

电子邮件地址不会被公开。 必填项已用*标注