题目描述
高精度乘以一个低精度
go 代码
package main
import "fmt"
func mul(a []int,b int)[]int {
var c []int
t :=0 // 进位
//从后往前循环
for i:=0;i<len(a);i++{
t = a[i]*b+t
c = append(c,t%10) //取模为结果
t /=10 //整除进位
if i>=len(a)-1{// 当最后一位计算完,需要进位时
c =append(c,t)
}
}
for len(c)>1 && c[len(c)-1]==0{
c =c[:len(c)-1]
}
return c //结果为倒序
}
func main() {
var a string
var b int
fmt.Scanf("%s",&a)
fmt.Scanf("%d",&b)
var A []int
for i:=len(a)-1;i>=0;i--{
A = append(A,int(a[i]-'0'))
}
res :=mul(A,b)
for i:=len(res)-1;i>=0;i--{
fmt.Printf("%d",res[i])
}
}
go 算法2
package main
import "fmt"
func mul(a []int,b int)[]int {
var c []int
t:=0
for i:=0;i<len(a)||t!=0;i++{
if i<len(a){
t +=a[i]*b+t
}
c = append(c,t%10)
t /=10
}
for len(c)>1 && c[len(c)-1]==0{
c =c[:len(c)-1]
}
return c
}
func main() {
var a string
var b int
fmt.Scanf("%s",&a)
fmt.Scanf("%d",&b)
var A []int
for i:=len(a)-1;i>=0;i--{
A =append(A,int(a[i]-'0'))
}
res :=mul(A,b)
for i:=len(res)-1;i>=0;i--{
fmt.Printf("%d",res[i])
}
}