脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

2022-10-26 10:41酷尔。 Python

这篇文章主要介绍了python实操案例练习,本文给大家分享的案例中主要任务有小学生算术、阶乘的精确值、孪生素数、6174问题,需要的小伙伴可以参考一下

前言

今天给大家分享一下刷到的关于数值处理的算法题。虽然题目比较简单但是问题的处理方式值得我们学习。小学生算术涉及到加法进位、阶乘精确值用于计算一个结果为很长的数、孪生素数是计算两个相邻的素数(比较简单)、6174问题按照题目进行模拟就可以。

小学生算术

问题描述

最近很多小学生迎来了快学第一考,在进行加法进位的时候可把小学生难为坏了 因为进位的时候稍不注意就会算错。请你设计一个程序,实现计算两位数相加的时候需要 进行多少次进位,以供小学生检验自己是否正确的进位。(以0 0 结尾)

样例输入:

123 456

555 555

123 594

0 0

样例输出:

0

3

1

问题分析

可以设置一个标志位在进行计算的时候判断两个数是否需要进位, 如果进位了就将进位的标志位数值设为1,不进就将标志位数值设为0,因为在加法运算中进位最多进1。9+9=18,将8留下来将1进向更高位参与运算

代码实现

老规矩先上运行结果:

Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

再上代码:

import sys
flag=0
lis=[]
num=0
while True:
  m,n=sys.stdin.readline().strip().split()
  m,n=int(m),int(n)
  if n==m==0:
      break
  # 只要m,n经过变换有一个为0那么循环就终止
  while m and n:
      if (m%10+n%10+flag)>=10:
          num+=1
          flag=1
      else:
          flag=0
      m//=10
      n//=10
  lis.append(num)
  num=0
for i in lis:
  print(i)

 

阶乘精确值

问题描述

众所周知,Python数值型的位数与电脑内存有关。可以很轻松实现n的阶乘 ,但是对于C、C++而言整型的位数是有一定长度的。超过一定长度就会溢出,输入不超过1000的正整数n,输出n!=1234…*n的精确结果。

样例输入:

30

样例输出:

265252859812191058636308480000000

问题分析

很长很长的计算结果对于Python语言而言不会有太大影响,因为Pyhton会根据电脑内存的大小决定整型的大小。而对于C\C++这样的语言而言,数值型都有一定的长度。超过一定长度发生溢出之后将会影响最终的结果。这一个题目我们需要使用数组进行计算结果的存储,然后自己模拟乘法运算。最终得到计算结果。

代码实现

老规矩先上运行结果:

Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

上代码: 在这里使用了两种方式,一种是直接计算,另一种就是使用C语言风格进行模拟乘法。 由于Python内置模块较为强大直接计算超级方便还可以计算出很长的数,只需要很少的时间 (如下图)但是我们今天为自己找事情做,就使用Pyhton语言模拟一下C语言的写法。

即便计算10000的阶乘花费的时间依旧不到秒

Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

import time
def timmer(func):
  def weapper(*s):
      start=time.time()
      func(*s)
      end=time.time()
      print("用时:",end-start)
  return weapper

@timmer
def f1(n):
  # 直接计算
  ans=1
  # 用于标记现在是所在的位数
  if n==0 or n==1:
      print(1)
      exit()
  else:
      for i in range(2,n+1):
          ans=ans*i
              
  print(ans)
@timmer
def f2(n):
  # C语言方法精确计算
  ans=[0]*1000
  ans[0]=1
  for i in range(2,n+1):
      j=0
      c=0
      while j<1000:
          temp=ans[j]*i+c
          ans[j]=temp%10
          c=temp//10
          j+=1

  i=len(ans)-1
  flag=True
  while i>=0:
      if flag and ans[i]==0:
          pass
      else:
          print(ans[i],end="")
          flag=False
      i-=1
  print()

if __name__=="__main__":
  n=int(input())
  # f1(n)
  f2(n)

 

孪生素数

问题描述

素数又称质数,他是只能被1与他本身整除的整数,并且大于1现给出一个数,比他小的孪生素数 孪生素数的意思就是连续挨着的两个素数,并且他的的差为2(即 n与n-2) 现在给出一个正整数,请计算出比他小但是距离他最近的两个孪生素数。

样例输入:

1000

样例输出:

881 883

问题分析

判断是不是孪生素数,首先要确定是不是素数。是的话再判断与其相差2的数是不是素数。 如果两个都是的话直接进行输出,否则继续判断。

代码实现

老规矩先上运行结果:

Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

上代码:

def is_ok(num):
  if num==1:
      return False
  for i in range(2,int(math.sqrt(num))+1):
      if num%i==0:
          return False
  return True


n=int(input())
while n:
  if is_ok(n) and is_ok(n-2):
      print(n-2,n)
      break
  n-=1

 

6174问题

问题描述

假设你有各位数字互不相同的四位数。将该数中的数字从大到小排序后得到a 从小到大排序后得到b,然后使用a-b得到的结果取代原来的数。并继续相同的操作。 任务:输入一个数n输出操作序列。直到出现循环,比如排序前的6174生成的结果也是6174

样例输入:

1234

样例输出:

1234—>3087—>8352—>6174—>6174

问题分析

涉及到对数值中的数字进行排序

排序完后使用大的减去小的,然后对比生成的结果与原来的数。

代码实现

老规矩先上运行结果:

Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解

上代码:

# 自定义排序函数,如果r=True就是降序
def msort(n,r=True):
  ans=0
  temp=[]
  //将数值转换为列表
  while n:
      temp.append(n%10)
      n//=10
  #在刚刚进行排序的时候高位与低位进行了颠倒,再颠倒回来
  temp=temp[::-1]
  #排序
  temp=sorted(temp,reverse=r)
  # 将列表组合成数值并返回出去
  for i in temp:
      ans=ans*10+i
  return ans


ans=[]
n=int(input())
ans.append(n)
while True:
	# 得到最大最小值
  maxn=msort(n)
  minn=msort(n,False)
  temp=maxn-minn
  ans.append(temp)
  if n==temp:
      break
  n=temp
flag=True
for i in ans:
  if flag:
      print(i,end="")
      flag=False
  else:
      print("--->",i,end="",sep="")

这就是今天分享的全部内容啦!实现并不难但是思想非常的重要。希望大家能熟练掌握。

到此这篇关于Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解的文章就介绍到这了,更多相关Python 阶乘精确值内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/apple_51931783/article/details/123244862

延伸 · 阅读

精彩推荐
  • PythonPython3.5装饰器典型案例分析

    Python3.5装饰器典型案例分析

    这篇文章主要介绍了Python3.5装饰器,结合实例形式分析了装饰器修饰有参数函数、装饰器修饰函数参数等情况相关使用技巧,需要的朋友可以参考下...

    loveliuzz10002021-06-22
  • Pythonpython math模块的基本使用教程

    python math模块的基本使用教程

    这篇文章主要介绍了python math模块的基本使用教程,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...

    ゛竹先森゜11772021-08-26
  • PythonPython中实现常量(Const)功能

    Python中实现常量(Const)功能

    这篇文章主要介绍了Python中实现常量(Const)功能,python语言本身没有提供const,本文使用一个类来实现常量定义功能,并介绍了使用方法,需要的朋友可以参考...

    脚本之家8032020-05-20
  • Python详谈python3 numpy-loadtxt的编码问题

    详谈python3 numpy-loadtxt的编码问题

    下面小编就为大家分享一篇详谈python3 numpy-loadtxt的编码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    akon_wang_hkbu7672021-02-08
  • Pythonpython读取几个G的csv文件方法

    python读取几个G的csv文件方法

    今天小编就为大家分享一篇python读取几个G的csv文件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    RobbenEmi6482021-05-12
  • Python一些Centos Python 生产环境的部署命令(推荐)

    一些Centos Python 生产环境的部署命令(推荐)

    这篇文章主要介绍了一些Centos Python 生产环境的部署命令,非常不错,具有参考借鉴价值,需要的朋友参考下吧...

    wklken10162021-02-18
  • Python解决Python3.5+OpenCV3.2读取图像的问题

    解决Python3.5+OpenCV3.2读取图像的问题

    今天小编就为大家分享一篇解决Python3.5+OpenCV3.2读取图像的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    韦德隆东强7142021-04-25
  • Pythonpython使用matplotlib绘制图片时x轴的刻度处理

    python使用matplotlib绘制图片时x轴的刻度处理

    在使用matplotlib绘制图片时,x轴的刻度可能比较密集,特别是以日期作为x轴时,则最后会显示不出来。这篇文章主要介绍了python使用matplotlib绘制图片时x轴...

    小朱小朱绝不服输8102021-12-26