zoukankan      html  css  js  c++  java
  • Go语言实现大数开方程序

    Go语言的big包实现大数运算,但是有关大整数运算,似乎没有相应的开方程序。

    这里给出的程序,实现了大整数的开方运算函数。该程序是基于大整数开方运算的算法实现的。


    Go语言程序:

    // bigintsqrt project main.go
    package main
    
    import (
    	"fmt"
    	"math"
    	"math/big"
    )
    
    func main() {
    	v := uint64(123456789012345678)
    	sqrtv := uint64(math.Sqrt(float64(v)))
    	fmt.Printf("%d : %d
    ", v, sqrtv)
    
    	s := "123456789012345678"
    	v1 := sqrt(s)
    	fmt.Printf("%s : %v
    ", s, v1)
    
    	s = "100000000000000000000"
    	v1 = sqrt(s)
    	fmt.Printf("%s : %v
    ", s, v1)
    }
    
    // 计算大整数开方函数
    func sqrt(s string) *big.Int {
    	var n, a, b, m, m2 big.Int
    
    	n.SetString(s, 10)
    
    	a.SetInt64(int64(1))
    	b.Set(&n)
    
    	for {
    		m.Add(&a, &b).Div(&m, big.NewInt(2))
    
    		if m.Cmp(&a) == 0 || m.Cmp(&b) == 0 {
    			break
    		}
    
    		m2.Mul(&m, &m)
    		if m2.Cmp(&n) > 0 {
    			b.Set(&m)
    		} else {
    			a.Set(&m)
    		}
    	}
    
    	return &m
    }


    运算结果:

    123456789012345678 : 351364182
    123456789012345678 : 351364182
    100000000000000000000 : 10000000000


    程序说明:程序中给出了不同计算方法的结果,目的是便于比较计算结果的正确性。


  • 相关阅读:
    vi编辑器
    数据发送的三种方式
    发送文件的三种方式
    提交表单提示框确定取消 点取消不会刷新页面
    input value="值栈的值"
    值栈
    struts2文件上传突破2M限制
    jsp取不到值栈的值
    站群--插件--点击量
    Java WebService 简单实例
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563548.html
Copyright © 2011-2022 走看看