• 华为机试:大数相加,相乘,幂运算


    1.大数相加

    思路:

    两个数字转换为字符串,为了便于操作,分别逆转字符串,将短的字符串补上‘0’,使得长度相等。各个位分别相加,处理进位问题。最后再将结果倒置,从第一个不为0的字符开始输出

    代码:

    #reverse返回一个迭代器,用list()
    s1=list(reversed(num1))
    s2=list(reversed(num2))
    
    if len(s1)>len(s2):
        for i in range(len(s1)-len(s2)):
            s2.append('0')
    else:
        for i in range(len(s2)-len(s1)):
            s1.append('0')
    print(s1,s2)
    ans=[0]*(len(s1)+1)
    
    
    for i in range(len(s1)):
    
        sum = int(s1[i]) + int(s2[i])+ans[i]
        if(sum>9):
            ans[i+1]=ans[i+1]+sum//10
    
        ans[i] = sum % 10
    
    ans=list(reversed(ans))
    print(ans)
    i=0
    flag=0
    for i in range(len(ans)):
        if ans[i] != 0 and flag==0:
            break
    
        if ans[i]!=0:
            flag=1
        else:
            flag=0
    
    while i<len(ans):
        print(ans[i],end='')
        i=i+1
    

    2.大数相乘

    思路:

    与大数相加类似,模拟乘法,n位数*m位数,结果为n+m位数。先算出每一位的数,最后处理进位。

    代码:

    in1=input('').split(' ')
    num1=in1[0];
    num2=in1[1];
    s1=list(reversed(num1))
    s2=list(reversed(num2))
    
    if len(s1)>len(s2):
        for i in range(len(s1)-len(s2)):
            s2.append('0')
    else:
        for i in range(len(s2)-len(s1)):
            s1.append('0')
    print(s1,s2)
    ans=[0]*(max(len(s1),len(s2))*2)
    for i in range(min(len(s1),len(s2))):
        for j in range(max(len(s1),len(s2))):
            if len(s1)>len(s2):
                ans[i+j]+=int(s1[j])*int(s2[i])
            else:
                ans[i+j]+=int(s1[i])*int(s2[j])
            #print(ans[i])
    #print(ans)
    for i in range(len(ans)):
        temp=ans[i]
        ans[i]=temp%10
        if temp>9:
            ans[i+1]+=temp//10
    
    print(ans)
    ans=list(reversed(ans))
    print(ans)
    i=0
    flag=0
    while 1:
        if ans[i]!=0 and flag==0:
            break
        i+=1
    #print(i)
    while i!=len(ans):
        print(ans[i],end='')
        i+=1
    
    

    3幂运算

    思路:n**k,n*n循环k次,转为乘法

    for i in range(k-1):
        ans=bignumMul(ans,n)
    
  • 相关阅读:
    关于linux下如何使用svn 客户端
    vscode 如何格式化vue(template)html代码 , 保持标签属性不换行
    echarts的一些基础笔记
    Stompjs websocket vue
    GLSL反转矩阵inverse
    【入门向】使用 MetaHook Plus 绘制 HUD
    取文件MD5 WINAPI
    BAD APPLE C++控制台程序
    查看struct或class的内存布局
    让游戏以高性能GPU(独立显卡)运行
  • 原文地址:https://www.cnblogs.com/void-lambda/p/12309939.html
Copyright © 2020-2023  润新知