java 大数四则运算_大数四则运算java(转)

1 //大数的四则运算

2 #include

3 #include

4 #include

5 using namespace std;6

7 classBIGINTEGEROPERATIONS8 {9 private:10 static intCOMPARE(string number1, string number2)11 {12 intj;13

14 int length1 =number1.size();15 int length2 =number2.size();16

17 if(number1.size() == 0) number1 = "0";18 if(number2.size() == 0) number2 = "0";19

20 j = 0;21 for(int i = 0; i < length1; ++i)22 {23 if(number1[i] == ‘0‘) ++j;24 else break;25 }26 number1 =number1.substr(j);27

28 j = 0;29 for(int i = 0; i < length2; ++i)30 {31 if(number2[i] == ‘0‘) ++j;32 else break;33 }34 number2 =number2.substr(j);35

36 length1 =number1.size();37 length2 =number2.size();38

39 if(length1 >length2)40 {41 return 1;42 }43 else if(length1 ==length2)44 {45 if(number1.compare(number2) > 0)46 {47 return 1;48 }49 else if(number1.compare(number2) == 0)50 {51 return 0;52 }53 else

54 {55 return -1;56 }57 }58 else

59 {60 return -1;61 }62

63 return 0;64 }65

66 public:67 staticstring PLUS(string number1,string number2)68 {69 inti;70 int length1 =number1.size();71 int length2 =number2.size();72

73 string result="";74

75 reverse(number1.begin(), number1.end());76 reverse(number2.begin(), number2.end());77

78 for(i = 0; i < length1 && i < length2; i++)79 {80 char c = (char)(number1[i] + number2[i] - 48);81 result = result +c;82 }83

84 while(i

90 while(i

96 int carry = 0;97 for(i = 0; i < (int)result.size(); ++i)98 {99 int value = result[i] - 48 +carry;100 result[i] = (char)(value % 10 + 48);101 carry = value / 10;102 }103

104 if(carry !=0)105 {106 result = result + (char)(carry + 48);107 }108

109 for(i = result.size() - 1; i >= 0; i--)110 {111 if(result[i] != ‘0‘) break;112 }113

114 result = result.substr(0, i + 1);115

116 reverse(result.begin(), result.end());117 if(result.length() == 0) result = "0";118 returnresult;119 }120

121

122 staticstring MINUS(string number1,string number2)123 {124 inti;125 string result = "";126

127 int length1 =number1.size();128 int length2 =number2.size();129

130 if(COMPARE(number2,number1) > 0)131 {132 return "-" +MINUS(number2, number1);133 }134

135 reverse(number1.begin(),number1.end());136 reverse(number2.begin(),number2.end());137

138 for(i = 0; i < length1 && i < length2; i++)139 {140 char c = number1[i] - number2[i] + 48;141 result = result +c;142 }143

144 if(i

152 int carry = 0;153 for(i = 0; i < (int)result.length(); i++)154 {155 int value = result[i] - 48 +carry;156 if(value < 0)157 {158 value = value + 10;159 carry = -1;160 }161 else carry = 0;162 result[i]=(char)(value + 48);163 }164

165 for(i = result.size() - 1; i >= 0; i--)166 {167 if(result[i] != ‘0‘)break;168 }169

170 result = result.substr(0, i+1);171

172 reverse(result.begin(), result.end());173 if(result.length()==0) result = "0";174 returnresult;175 }176

177

178 staticstring MULTIPLY(string number1, string number2)179 {180 inti, j;181 int *iresult;182 int length1 =number1.size();183 int length2 =number2.size();184 string result = "";185

186 reverse(number1.begin(), number1.end());187 reverse(number2.begin(), number2.end());188

189 iresult = (int*)malloc(sizeof(int) * (length1 + length2 + 1));190 memset(iresult, 0, sizeof(int) * (length1 + length2 + 1));191

192 for(i = 0; i < length1; i++)193 {194 for(j = 0; j < length2; j++)195 {196 iresult[i+j] += ((number1[i] - 48) * (number2[j] - 48));197 }198 }199

200 int carry = 0;201 for(i = 0; i < length1 + length2; i++)202 {203 int value = iresult[i] +carry;204 iresult[i] = value % 10;205 carry = value / 10;206 }207

208 for(i = length1 + length2 - 1; i >= 0; i--)209 {210 if(iresult[i] != 0)break;211 }212

213 for(; i >= 0; i--)214 {215 result = result + (char)(iresult[i]+48);216 }217

218 free(iresult);219

220 if(result == "") result = "0";221 returnresult;222 }223

224

225 //缺省地,商数向下取整, floatpoint用于指定保留小数点的位数

226 static string DIVIDE(string number1, string number2, int floatpoint = 0)227 {228 inti, j, pos;229 string result = "";230 string tempstr = "";231 int length1 =number1.size();232 int length2 =number2.size();233

234 if((COMPARE(number2, number1) > 0) && (floatpoint == 0))235 {236 return "0";237 }238

239 tempstr = number1.substr(0, length2);240 pos = length2 - 1;241

242 while(pos = 0)246 {247 quotient++;248 tempstr =MINUS(tempstr, number2);249 }250

251 result = result + (char)(quotient + 48);252 pos++;253 if(pos

259 if(floatpoint > 0)260 {261 result += ‘.‘;262 string stmp = "1";263 int itmp = 0;264 for(int k = 0; k < floatpoint; ++k)265 {266 stmp += ‘0‘;267 if(COMPARE(MULTIPLY(MINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2)), stmp), number2) < 0)268 {269 result += ‘0‘;270 ++itmp;271 }272 }273

274 string temp =DIVIDE(MULTIPLY(MINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2)), stmp), number2);275 if(temp[0] != ‘0‘) result +=temp;276 }277

278 j =result.size();279 for(i = 0; i < j; i++)280 {281 if(result[i] != ‘0‘) break;282 }283

284 result =result.substr(i, j);285

286 returnresult;287 }288

289 staticstring MOD(string number1, string number2)290 {291 if(COMPARE(number2, number1) > 0)292 {293 returnnumber1;294 }295 else if(COMPARE(number2, number1) == 0)296 {297 return "0";298 }299 else

300 {301 returnMINUS(number1, MULTIPLY(DIVIDE(number1, number2), number2));302 }303 }304 };305

306 int main(int argc, char*argv[])307 {308 string str1 = "9999999999999999999999999999999999999999";309 string str2 = "9998999899989998999899989998999899989998";310

311 cout << BIGINTEGEROPERATIONS::PLUS(str1, str2) <

321 return 0;322 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http参数自动转换java接口参数设置_Springmvc请求参数类型转换器及原生api代码实例...

一、springmvc的xml配置文件xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.springframework.org/schema/context"xmlns:mvc"http://www.springframework.org/schema/mvc"xsi:schemaLocation"http://www.s…

java构建json_Java构造和解析Json数据的两种方法详解一

在www.json.org上公布了很多JAVA下的json构造和解析工具&#xff0c;其中org.json和json-lib比较简单&#xff0c;两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。用org.son构造和解析Json数据的方法详解请参见我下一篇博文&#xff1a…

python perl lisp,是否可能像python中的perl的lvalue或lisp的setf一样?

In lisp you can say:(setf (aref a 1) 5)In perl you can say:substr( $string, $start, $stop ) ~ s/a/b/gIs it possible something like this in python? I mean is it possible to use function result as a lvalue (as a target for assignment operation)?解决方案No.…

java final被覆盖_java中的final的使用

1、final类不能被继承&#xff0c;因此final类的成员方法没有机会被覆盖&#xff0c;默认都是final的。在设计类时候&#xff0c;如果这个类不需要有子类&#xff0c;类的实现细节不允许改变&#xff0c;并且确信这个类不会再被扩展&#xff0c;那么就设计为final类。(什么时候…

java jaxb注解xmlnull_java – 将空值表示为xml jaxb中的空元素

我强烈建议使用不存在节点或xsi&#xff1a;nil “true”属性来表示null.这最适用于模式验证(即< age />或< age>< / age>不是xsd&#xff1a;int类型的有效元素.但是,如果您不能在这里完成您的用例&#xff1a;标准JAXB行为import javax.xml.bind.annotatio…

wordcount.java_mapreduce中wordcount的java实现

用java模拟词频统计。有3个文件&#xff1a;text1: hello worldtext2:hello hadooptext3:hello mapreduce对上面的文件进行词频统计&#xff1a;结果应该是&#xff1a;hello:3; hadoop:1; world:1; mapreduce:1代码实现如下&#xff1a;package count;import java.ut…

java applog_java - 通过Logback登录到App Engine request_log - SO中文参考 - www.soinside.com

我当前部署的当前Logback配置如下(您可以说我的构想已耗尽...)&#xff1a;%-4relative [%thread] %-5level %logger{35} - %msgapplication.logWARNtech.provingground.dive_overwatch.etc.logging.enhancers.TestEnhancer%-4relative [%thread] %-5level %logger{35} - %msg查…

java生成pdf怎么合并行或者列_Java基础之PDF文件的合并

1、首先下载一个jar包&#xff1a;pdfbox-app-1.7.1.jar2、代码如下&#xff1a;package com;import java.io.File;import java.io.IOException;import org.apache.pdfbox.util.PDFMergerUtility;/*** PDF格式的图片合并**/public class PdfBox {private static String[] getFi…

java 迭代器的原理_java里Iterator的原理

Iterator&#xff1a;迭代器。其实就是集合取出元素的方式&#xff0c;每个容器的数据结构不一样&#xff0c;所以他们存取的方式不一样&#xff0c;具体事项方法不一样&#xff0c;具体实现方法不一样&#xff0c;每个集合都具备取出方式&#xff0c;对于取出这个动作不足以用…

Java里a和b哪个大_Java中 a+=b和a=a+b有什么区别?

在java语言中&#xff0c;ab和aab的主要区别是在运算的精度上。类似的有“- 、 * 、/ 、% ”&#xff0c;这里以ab 与 aab 举例说明一下。1.下面是一串代码&#xff0c;我们试一下aab的形式&#xff1a;public class TestDemo {public static void main(String[] args) {byte a…

java程序回滚之后在哪看_Java在触发事务回滚之后为什么会再一次回到Servlet开始的地方重新走一次流程?...

代码流程前台点击"提交订单"进入BaseServlet.classBaseServlet.class分发至子类OrderServlet.class的submitOrder()方法submitOrder()调用Service层的submitOrder()方法.关键是Service层submitOrder()中使用了事务回滚. 这里调用了Dao层两个方法: fun01()和fun02(), …

java不进入for_为什么阿里巴巴Java开发手册中强制要求不要在foreach循环里进行元素的remove和add操作?...

在阅读《阿里巴巴Java开发手册》时&#xff0c;发现有一条关于在 foreach 循环里进行元素的 remove/add 操作的规约&#xff0c;具体内容如下&#xff1a;错误演示我们首先在 IDEA 中编写一个在 foreach 循环里进行 remove 操作的代码&#xff1a;import java.util.ArrayList;i…

mysql对测试如何_我如何对MySQL进行基准测试?

我目前正在使用MySQL工作台.我希望看到表中行数增加时性能的差异.我想专门测试并比较1000行,10,000行,100,000行,1,000,000行和10,000,000行.那么,是否有任何工具可以让我这样做并提供有关磁盘I / O,内存使用情况,CPU使用率和完成查询的时间的统计信息&#xff1f;解决方法:是.…

JAVA两个视图层_MVC - 管理帐户 . 一个视图有两个局部视图和两个模型

美好的一天&#xff01;我正在管理帐户页面上&#xff0c;用户可以在其中更改密码和电子邮件 .我有一个管理视图&#xff0c;其中有两个部分视图&#xff0c;更改密码和更改电子邮件 . 这两种都使用两种不同的模型 . 这样做的目的是在同一页面上同时包含更改密码和更改电子邮件…

8086汇编4位bcd码_二进制格雷码与自然二进制码的互换分析

在精确定位控制系统中&#xff0c;为了提高控制精度&#xff0c;准确测量控制对象的位置是十分重要的。目前&#xff0c;检测位置的办法有两种&#xff1a;其一是使用位置传感器&#xff0c;测量到的位移量由变送器经A/D转换成数字量送至系统进行进一步处理。此方法精度高&…

python datetime.datetime 当前_关于datetime:如何让python显示当前时间(东部)

如何让python在东方显示时间&#xff1f;我已经看过了Python文档&#xff0c;但它非常混乱。我使用的是python 3。谢谢。这可能有帮助&#xff1a;stackoverflow.com/questions/117514/&hellip&#xff1b;基本上&#xff0c;在内部使用UTC&#xff0c;并在显示时使用pytz转…

软件工程结构化建模的方法和工具_软件工程系列-结构化设计方法2

本系列文章为笔记&#xff0c;内容根据北京大学《软件工程》MOOC 初始化模块结构图精化的启发式规则常见的启发式规则什么叫做“启发式”根据设计准则&#xff0c;从长期的软件开发实践中&#xff0c;总结出来的规则既不是设计目标&#xff0c;也不是设计时应该普遍遵循的原理常…

java四种权限的高低_Java(四种权限修饰符)

/*Java中有四种权限修饰符&#xff1a;public > protected > (default) > private同一个类(我自己) YES YES YES YES同一个包(我邻居) YES YES YES NO不同包子类(我儿子) YES YES NO NO不同包非子类(陌生人) YES NO NO NO注意事项&#xff1a;(default)并不是关键字“…

安全扫描失败无法上传_Apache Solr 未授权上传(RCE)漏洞的原理分析与验证

漏洞简介Apache Solr 发布公告&#xff0c;旧版本的ConfigSet API 中存在未授权上传漏洞风险&#xff0c;被利用可能导致 RCE (远程代码执行)。受影响的版本&#xff1a;Apache Solr6.6.0 -6.6.5Apache Solr7.0.0 -7.7.3Apache Solr8.0.0 -8.6.2安全专家建议用户尽快升级到安全…

php session页面传值,PHP session在页面间传递的问题

PHP session在页面间传递的问题:前提: 使用codeIgniter的框架, 使用PHP自带的session1. 在纯apache服务器上没有问题2. 在Nginx的apache模式下, 独立于codeIgniter框架外的页面无问题3. 在Nginx的apache模式下, 置于codeIgniter框架内的页面, 页面间session的传递有问题, 即一个…