【Go语言入门100题】046 整除光棍 (20 分) Go语言 | Golang

简介: L1-046 整除光棍 (20 分) Go语言|Golang这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。

L1-046 整除光棍 (20 分) Go语言|Golang

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。


提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。


输入格式:

输入在一行中给出一个不以5结尾的正奇数x(<1000)。


输出格式:

在一行中输出相应的最小的s和n,其间以1个空格分隔。


输入样例1:

31


结尾无空行


输出样例1:

3584229390681 15


结尾无空行


思路:

首先,这个很明显,不能用int去存这个数,因为这个数很大,是存不下去的。

我们可以通过这个字符一位一位进行运算

然后把结果拼接成字符串的形式

代码如下:

package main
import "fmt"
func main() {
  var n int
  _,_=fmt.Scan(&n)
  divis := 0
  var number [1001]rune
  rem,length,flag,count := 0,0,0,0
  for {
    count++
    divis = rem*10 + 1 //从1开始进行,1,11,111这样开始
    rem = divis % n    //余数
    if divis/n != 0 || flag != 0 { // 如果可以整除或是flag!=0
      flag = 1
      // fmt.Println(divis,divis/n,flag)
      number[length] = rune(divis/n + '0')  // 用字符形式存余数
      length++  // 不断叠加
    }
    if rem == 0 {  //如果没有余数,即可以整除
      s := ""
      for _, item := range number {
        if item != 0 {  //再进行拼接
          s += string(item)
        }
      }
      fmt.Printf("%s %d", s, count)
      break
    }
  }
}
相关文章
|
3天前
|
存储 Go 索引
go语言使用for循环遍历
go语言使用for循环遍历
17 7
|
6天前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
18 2
|
7天前
|
Go 调度 开发者
Go语言中的并发编程:深入理解goroutines和channels####
本文旨在探讨Go语言中并发编程的核心概念——goroutines和channels。通过分析它们的工作原理、使用场景以及最佳实践,帮助开发者更好地理解和运用这两种强大的工具来构建高效、可扩展的应用程序。文章还将涵盖一些常见的陷阱和解决方案,以确保在实际应用中能够避免潜在的问题。 ####
|
7天前
|
测试技术 Go 索引
go语言使用 range 关键字遍历
go语言使用 range 关键字遍历
14 3
|
7天前
|
测试技术 Go 索引
go语言通过 for 循环遍历
go语言通过 for 循环遍历
16 3
|
9天前
|
安全 Go 数据处理
Go语言中的并发编程:掌握goroutine和channel的艺术####
本文深入探讨了Go语言在并发编程领域的核心概念——goroutine与channel。不同于传统的单线程执行模式,Go通过轻量级的goroutine实现了高效的并发处理,而channel作为goroutines之间通信的桥梁,确保了数据传递的安全性与高效性。文章首先简述了goroutine的基本特性及其创建方法,随后详细解析了channel的类型、操作以及它们如何协同工作以构建健壮的并发应用。此外,还介绍了select语句在多路复用中的应用,以及如何利用WaitGroup等待一组goroutine完成。最后,通过一个实际案例展示了如何在Go中设计并实现一个简单的并发程序,旨在帮助读者理解并掌
|
8天前
|
Go 索引
go语言按字符(Rune)遍历
go语言按字符(Rune)遍历
22 3
|
18天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
38 2
|
17天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
26 2
|
17天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
31 2