力扣题:高精度运算-1.4

2024-01-05 17:44
文章标签 1.4 运算 高精度 力扣题

本文主要是介绍力扣题:高精度运算-1.4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

力扣题-1.4

[力扣刷题攻略] Re:从零开始的力扣刷题生活

力扣题1:306. 累加数

解题思想:首先先通过secondStart和secondEnd可以确定num1 = num[0:secondStart],num2 = num[secondStart:secondEnd],然后遍历secondStart和secondEnd进行第二个数字的提取,然后通过check函数进行判断是否合法。

在这里插入图片描述

class Solution(object):def isAdditiveNumber(self, num):""":type num: str:rtype: bool"""n = len(num)## 遍历secondStart和secondEnd即可,因为num1 = num[0:secondStart],num2 = num[secondStart:secondEnd]## secondStart从1开始,secondEnd从secondStart+1开始for secondStart in range(1,n-1):## 判断特殊条件num1=0if num[0] == '0' and secondStart!=1:breakfor secondEnd in range(secondStart,n-1):## 判断特殊条件num2=0if num[secondStart] == '0' and secondStart != secondEnd:breaknum1 = num[0:secondStart]num2 = num[secondStart:secondEnd+1]num3 = numif self.check(num1,num2,num3):return Truereturn Falsedef add(self,num1,num2):## 进行字符串的加法操作,从低位开始相加i, j = len(num1) - 1, len(num2) - 1add = 0ans = list()while i >= 0 or j >= 0 or add != 0:x = int(num1[i]) if i >= 0 else 0y = int(num2[j]) if j >= 0 else 0result = x + y + addans.append(str(result % 10))add = result // 10i -= 1j -= 1## 最后需要进行翻转return "".join(ans[::-1])def check(self,num1,num2,num3):n = len(num3)num3 = num3[len(num1)+len(num2):]flag = 1while num3 != "" and flag == 1:temp = self.add(num1,num2)temp_len = len(temp)curr_num = num3[:temp_len]if curr_num == temp:num1 = num2num2 = tempnum3 = num3[temp_len:]else:flag = 0if flag == 0:return Falsereturn True
class Solution {
public:bool isAdditiveNumber(string num) {int n = num.length();for (int secondStart = 1; secondStart < n - 1; ++secondStart) {if (num[0] == '0' && secondStart != 1) {break;}for (int secondEnd = secondStart; secondEnd < n - 1; ++secondEnd) {if (num[secondStart] == '0' && secondStart != secondEnd) {break;}string num1 = num.substr(0, secondStart);string num2 = num.substr(secondStart, secondEnd - secondStart + 1);string num3 = num;if (check(num1, num2, num3)) {return true;}}}return false;}string add(string num1, string num2) {int i = num1.length() - 1;int j = num2.length() - 1;int add = 0;string result = "";while (i >= 0 || j >= 0 || add != 0) {int x = (i >= 0) ? (num1[i] - '0') : 0;int y = (j >= 0) ? (num2[j] - '0') : 0;int sum = x + y + add;result = char(sum % 10 + '0') + result;add = sum / 10;i -= 1;j -= 1;}return result;}bool check(string num1, string num2, string num3) {int n = num3.length();num3 = num3.substr(num1.length() + num2.length());int flag = 1;while (!num3.empty() && flag == 1) {string temp = add(num1, num2);int tempLen = temp.length();string currNum = num3.substr(0, tempLen);if (currNum == temp) {num1 = num2;num2 = temp;num3 = num3.substr(tempLen);} else {flag = 0;}}return (flag == 1);}
};

这篇关于力扣题:高精度运算-1.4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573656

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场景了解 位运算和逻辑运算的设计初衷源自计算机底层硬件和逻辑运算的需求,它们分别针对不同的处理对象和场景。以下是它们设计的初始目的简介:

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前,不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础,因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示,很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间的互相转换。 十进制转二进制 十进制转二进制可以使用常见的 除2取余法 进行。每次将十进制除以2并记录所得余数,直到商为0,然后再将记录的余数 从下往上排列即

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

高精度打表-Factoring Large Numbers

求斐波那契数,不打表的话会超时,打表的话普通的高精度开不出来那么大的数组,不如一个int存8位,特殊处理一下,具体看代码 #include<stdio.h>#include<string.h>#define MAX_SIZE 5005#define LEN 150#define to 100000000/*一个int存8位*/int num[MAX_SIZE][LEN];void

快速幂运算的一些模板

这里用递归和循环两种做法来做。 简单来说,快速幂就是把底数扩大,指数缩小,比如2*2=4;计算2的幂时,就可以转换成4的幂来运算,这样可以避免在计算大的数据时爆int的现象  //递归int power(int a,int n){int ans;if(n==2) ans=1;else{ans=power(a*a,n/2);if(n%2==1) ans*=a;}return ans;}

高精度计算----减法运算(浮点型)

基于上一贴,修改减法运算适合于高精度浮点型计算。 因为减法比加法难度大一点,考虑的地方也要多一些,可能代码有欠缺,欢迎指出。 运算说明: 1、相减函数依旧没改变,包括上一贴的判断被减数与减数的大小函数也没变。 2、增加两个函数,取小数位数函数和结果处理(回归小数点)函数 3、与加法浮点高精度运算相比,这里改变较多的是结果处理函数,加法加完后,位数不减反增,而且最多增一位。减法会消失掉好多

高精度计算----减法运算

处理大数减法运算: 1、首先要判断被减数与减数哪个更大,再相应的带入减法函数去处理。具体的比较可以使用字符串的相关知识去比较。 2、相减要先对齐数组,依照减数的长度,执行相应的减法运算次数。 3、不需要借位相减的话,直接减去;需要的话,向前借一位,若前一位是0,则再前借(此时前一位的0变为10)。 测试程序效果如下:   以下代码包括相减函数,比较被减数减数函数,若有错误,请指出:

高精度加法,乘法,阶乘

#include <iostream>#include <map>#include <string>#include <algorithm>using namespace std;const int Max = 50000;string str1,str2;/***********乘法***********/void chenfa(){cin >> str1>>str2;int a