高精度计算

主页:(*´∇`*) 咦,又好了~ xiaocr_blog


(1)数据的接收方法和存储方法:

当输入的数据很长的时候,可采取字符串方式输入,这样可以输入位数很长的数,利用字符串函数和操作运算,将每一位数取出,存入数组中。

(2)高精度数位数确定:

位数确定:接收时往往是用字符串的,所以它的位数就等于字符串长度。

(3)高精度除法分为竖式除法还有模拟减法两种

//加法进位 c[i] = a[i] + b[i]
if(c[i]>=10){c[i] %= 10;++c[i+1];}
//减法借位
if(a[i]<b[i]){--a[i+1];a[i]+=10;c[i] = a[i] - b[i]  }
//高除低除法储存无需倒置,竖式除法
//高除高为减法模拟除法

#include<bits/stdc++.h>
using namespace std;
int main() {char a1[100], b1[100];int a[100], b[100], c[100];memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(c, 0, sizeof(c));gets_s(a1);gets_s(b1);int lena = strlen(a1);int lenb = strlen(b1);for (int i = 0; i <= lena - 1; i++) {a[lena - i] = a1[i] - '0';}for (int i = 0; i <= lenb - 1; i++) {b[lenb - i] = b1[i] - '0';}int lenc = 1;int x = 0;while (lenc <= lena || lenc <= lenb) {c[lenc] = a[lenc] + b[lenc]+x;x = c[lenc] / 10;c[lenc] %= 10;lenc++;}c[lenc] = x;if (c[lenc] == 0) {//处理最高位lenc--;}for (int i = lenc; i >= 1; i--) {cout << c[i];}return 0;
}
#include<bits\stdc++.h>
using namespace std;
int main() {char a1[100], b1[100],q[100];int a[100], b[100], c[100];memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(c, 0, sizeof(c));gets(a1);gets(b1); if (strlen(a1) < strlen(b1) || (strlen(a1) == strlen(b1)&&strcmp(a1, b1) < 0)) {strcpy(q, a1);strcpy(a1, b1);strcpy(b1, q);cout << "-";}int lena = strlen(a1);int lenb = strlen(b1);for (int i = 0; i <= lena - 1; i++) {a[lena - i] = a1[i] - '0';}for (int i = 0; i <= lenb - 1; i++) {b[lenb - i] = b1[i] - '0';}int lenc = 1;while (lenc <= lena || lenc <= lenb) {if (a[lenc] < b[lenc]) {a[lenc] += 10;	a[lenc + 1]--;}c[lenc] = a[lenc] - b[lenc];lenc++;}lenc--;while ((c[lenc] == 0) && (lenc > 1)) {lenc--;}for (int i = lenc; i >= 1; i--) {cout << c[i];}return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){char a1[101],b1[101];int a[101],b[101],c[101];int lena,lenb,lenc;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));gets(a1),gets(b1); lena = strlen(a1);lenb = strlen(b1);for(int i =0;i<=lena-1;i++){a[lena-i] = a1[i] - '0';}for(int i =0;i<=lenb-1;i++){b[lenb-i] = b1[i] - '0';}for(int i =1;i<=lena;i++){for(int j =1;j<=lenb;j++){c[i+j-1] += a[i]*b[j];c[i+j] += c[i+j-1]/10;c[i+j-1]%=10;}}lenc = lena + lenb;if(c[lenc]==0&&lenc>=1){lenc--;}for(int i =lenc;i>=1;i--){cout<<c[i];}return 0;
} 
#include<bits/stdc++.h>
using namespace std;
char a1[101];
int a[101],c[101],x;
long long b;
int main(){cin>>a1>>b;int lena = strlen(a1);for(int i =1;i<=lena;i++){a[i] = a1[i-1] - '0';}for(int i=1;i<=lena;i++){c[i] = (10*x+a[i])/b;x = (10*x+a[i])%b;}int lenc =1;while(c[lenc]==0&&lenc<lena){lenc++;}for(int i = lenc;i<=lena;i++){cout<<c[i];}return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[101], b[101], c[101];
void init(int a[]) {char st[101];cin >> st;a[0] = strlen(st);for (int i = 1; i <= a[0]; i++) {a[i] = st[a[0]-i] - '0';}
}
void output(int a[]) {if (a[0] == 0) {cout << 0;return;}for (int i = a[0]; i >= 1; i--) {cout << a[i];}
}
int compare(int a[], int b[]) {if (a[0] > b[0]) return 1;if (a[0] < b[0]) return -1;for (int i = a[0]; i >= 1; i--) {if (a[i] > b[i]) return 1;if (a[i] < b[i]) return -1;}return 0;
}
void minus_(int a[], int b[]) {int flag;flag = compare(a, b);if (flag == 0) {a[0] = 0;return;}if (flag == 1) {for (int i = 1; i <= a[0]; i++) {if (a[i] < b[i]) {a[i + 1]--; a[i] += 10;}a[i] -= b[i];}while (a[a[0]] == 0 && a[0] > 0) {a[0]--;}return;}
}
void numcpy(int p[], int q[], int det) {for (int i = 1; i <= p[0]; i++) {q[i + det - 1] = p[i];q[0] = p[0] + det - 1;}
}
void chuGao(int a[], int b[], int c[]) {int tem[101];c[0] = a[0] - b[0] + 1;for (int i = c[0]; i >= 1; i--) {memset(tem, 0, sizeof(tem));numcpy(b, tem, i);while (compare(a, tem) > 0) {c[i]++;minus_(a, tem);}}while (c[0] > 0 && c[c[0]] == 0) {c[0]--;}return;
}
int main() {memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));init(a), init(b);chuGao(a, b, c);output(c);return 0;
}

1.大整数的加法

#include<bits/stdc++.h>
using namespace std;
char a1[101], b1[101];
int a[101], b[101], c[101];
int lena, lenb, lenc;
int main() {cin >> a1 >> b1;lena = strlen(a1); lenb = strlen(b1);for (int i = 0; i <= lena - 1; i++) {a[lena - i] = a1[i] - '0';}for (int i = 0; i <= lenb - 1; i++) {b[lenb - i] = b1[i] - '0';}lenc = 1;while (lenc <= lena || lenc <= lena) {lenc++;}int x = 0;for (int i = 1; i <= lenc; i++) {c[i] = a[i] + b[i] + x;x = c[i] / 10;c[i] %= 10;}while (c[lenc] == 0 && lenc > 0) {lenc--;}for (int i = lenc; i >=1; i--) {cout << c[i];}return 0;
}

2.给定一个整数,计算2的N次方

#include<bits/stdc++.h>
using namespace std;
int a[1001];
int N;
int main() {a[1] = 1;cin >> N;int k = 1,x=0;for (int j = 1; j <= N; j++) {x = 0;for (int i = 1; i <= k; i++) {a[i] = a[i] * 2 + x;x = a[i] / 10;a[i] %= 10;if (x != 0 && i == k) {k++;//伸缩}}}for (int i = k; i >= 1; i--) {cout << a[i];}return 0;
}

3.大整数的因子

#include<bits/stdc++.h>
using namespace std;
char a1[101];
int a[101], c[101], lena,b, x;
int main() {cin >> a1;lena = strlen(a1);for (int i = 1; i <= lena; i++) {a[i] = a1[i - 1] - '0';}for (int i = 2; i <= 9; i++) {x = 0;for (int j = 1; j <= lena; j++) {c[j] = (a[j] + x * 10) / i;x = (10 * x + a[j]) % i;}if (x % i == 0) {cout << i << " ";}}return 0;
}

4.*10000以内n的阶乘

#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001];
int main(){int n,fac,k=1;cin>>n;a[1] = 1;for(int i =1;i<=n;i++){for(int j =1;j<=k;j++){a[j] = a[j]*i;a[j]= a[j-1]/10+a[j];a[j-1] = a[j-1]%10;if(a[j]>=10&&j>=k){k++;}}}for(int i =k;i>=1;i--){cout<<a[i];}return 0;
}


5*.高精度计算之阶乘和

#include<bits/stdc++.h>
using namespace std;
int a[10001], sum[10001], n;
void getsum(int a[], int b[]) {int tem[10001] = { 0 };int x = 0;for (int i = 1; i <= 10001; i++) {tem[i] = a[i] + b[i] + x;x = tem[i] / 10;tem[i] %= 10;}for (int i = 1; i <= 10001; i++) {b[i] = tem[i];}
}
int main() {cin >> n;for (int i = 1; i <= n; i++) {memset(sum, 0, sizeof(sum));a[1] = 1; int k = 1;for (int j = 1; j <= i; j++) {for (int p = 1; p <= k; p++) {a[p] = a[p] * j;a[p] = a[p - 1] / 10 + a[p];a[p - 1] = a[p - 1] % 10;if (a[p] >= 10 && p >= k) {k++;}}}getsum(a, sum);}int t = 10001;while (sum[t] == 0) {t--;}for (int i = t; i >= 1; i--) {cout << sum[i];}return 0;
}
#include<stdio.h>
#define N 10000 
int main()
{int i, j, x, k, n, b[N] = { 0 };scanf("%d", &n);for (k = 1; k <= n; k++){int a[N] = { 0 };a[9999] = 1;for (i = 1, x = 0; i <= k; i++) {for (j = 9999; j >= 0; j--){a[j] = a[j] * i + x;x = a[j] / 10;a[j] = a[j] % 10;}}for (j = 9999; j >= 0; j--){b[j] = b[j] + a[j];if (b[j] >= 10){b[j - 1] = b[j - 1] + 1;b[j] = b[j] - 10;}}}for (i = 0; i < N; i++)if (b[i] != 0) break; for (x = i; x < N; x++)printf("%d", b[x]);return 0;
}

6.大整数乘法

#include<bits/stdc++.h>
using namespace std;
char a1[10001], b1[10001];
int a[10001], b[10001], c[10001];
int main() {int lena, lenb, lenc;cin >> a1 >> b1;lena = strlen(a1);lenb = strlen(b1);for (int i = 0; i <= lena-1; i++) {a[lena - i] = a1[i] - '0';}for (int i = 0; i <= lenb-1; i++) {b[lenb - i] = b1[i] - '0';}lenc = lena + lenb;for (int i = 1; i <= lena; i++) {for (int j = 1; j <= lenb; j++) {c[i + j - 1] += b[j] * a[i];c[i + j] += c[i + j - 1] / 10;c[i+j-1]%= 10;}}lenc = lena + lenb;while(c[lenc] == 0 && lenc > 0) {lenc--;}for (int i = lenc; i >= 1; i--) {cout << c[i];}return 0;
}

7.大整数除以13,输出商和余数

#include<bits/stdc++.h>
using namespace std;
char a1[10001];
int a[10001],b[101];
const int n = 13;
int x;
int main() {cin >> a1;int lena = strlen(a1);for (int i = 1; i <= lena; i++) {a[i] = a1[i - 1]-'0';}for (int i = 1, x = 0; i <= lena; i++) {b[i] = (a[i] + x * 10) / 13;;x = (a[i] + x * 10) % 13;}int len = 1;while (b[len] == 0&&len<lena) {len++;}for (int i = len; i <= lena; i++) {cout << b[i];}cout << endl;cout << x;return 0;
}

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

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

相关文章

Linux 常见驱动框架

一、V4L2驱动框架 v4l2驱动框架主要对象&#xff1a; &#xff08;1&#xff09;video_device&#xff1a;一个字符设备&#xff0c;为用户空间提供设备节点(/dev/videox)&#xff0c;提供系统调用的相关操作(open、ioctl…) &#xff08;2&#xff09;v4l2_device&#xff1a…

【大数据面试题】 018 数据仓库的分层了解吗?说说你的理解

一步一个脚印&#xff0c;一天一道面试题。 数据仓库是比较常见的考点。今天就介绍一下数据仓库的分层。本篇文章会较多的图片是来自尚硅谷的。 数据仓库的背景和好处 数据仓库的诞生就和大数据的诞生有很大的相似。大数据的诞生是为了处理超大的数据&#xff0c;并在其中探…

【Java Web基础】一些网页设计基础(一)

文章目录 1. 父盒子下子盒子的左右浮动布局2. 浮动布局中&#xff0c;高度较小的盒子撑起整个盒子的高度3. 在2中&#xff0c;logo和title都是顶着放置的&#xff0c;让logo和title垂直居中4. 字体大小自适应5. 响应式布局 1. 父盒子下子盒子的左右浮动布局 父盒子CSS&#xff…

Java实现知乎热点小时榜爬虫

1.效果演示 1.1 热点问题列表 启动程序后&#xff0c;自动展示热点问题&#xff0c;并等待终端输入 1.2 根据序号选择想看的热点问题 输入问题序号&#xff0c;展示回答内容 1.3 退出 输入q即可退出程序 2.源码 2.1 pom.xml <?xml version"1.0" enco…

B端:列表页选表格还是卡片,有讲究的。

选择表格或卡片作为列表页的展示方式&#xff0c;各有其优缺点。下面是对表格和卡片的优缺点进行详细介绍&#xff1a; 表格的优点&#xff1a; 结构化展示&#xff1a;表格以行和列的形式展示数据&#xff0c;可以清晰地展示多个字段的信息&#xff0c;方便用户进行比较和筛选…

2、高级语言的语法描述

常用的高级程序设计语言 程序语言的定义 语法 一组规则&#xff0c;用它可以形成和产生合适的程序 词法规则&#xff1a;单词符号的形成规则。 单词符号的形成规则单词符号是语言中具有独立意义的最基本结构 一般包括:常数、标识符、基本字、算符、界符等 描述工具:有限自动机…

【全网最详细】ComfyUI下,Insightface安装指南-聚梦小课堂

&#x1f96e;背景 ComfyUI下使用IP-adapter下的faceID模型的时候&#xff0c;大家可能会遇到如下错误&#xff1a; Error occurred when executing InsightFaceLoader: No module named insightface File "F:\ComfyUI-aki\execution.py", line 151, in recursive_…

ElasticSearch架构设计

一、基础概念 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单&#xff0c;它不仅包括了全文搜索功能&#xff0c;还可以进行以下工作: 一个分布式的实时文档…

微信小程序调用百度智能云API(菜品识别)

一、注册后生成应用列表创建应用 二、找到当前所需使用的api菜品识别文档 三、点链接看实例代码 这里需要使用到如下几个参数&#xff08;如下&#xff09;&#xff0c;其他的参数可以不管 client_id &#xff1a; 就是创建应用后的API Keyclient_secret&#xff1a; 就是创建…

Docker 笔记(五)--链接

这篇笔记记录了Docker 的Link。 官方文档&#xff1a; Legacy container links - Communication across links 目录 参考Legacy container linksConnect using network port mappingConnect with the linking systemThe importance of naming Communication across linksEnviro…

3.18 day6 C++

以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位进解员&#xff0c;他会为每种动 物表…

【闲聊】-后端框架发展史

框架&#xff0c;是为了解决系统复杂性&#xff0c;提升开发效率而产生的工具&#xff0c;主要服务于研发人员。 当然&#xff0c;框架还有更深层的作用&#xff0c;框架的沉淀是一种高级的抽象&#xff0c;会将人类的业务逐步抽象为统一标准又灵活可变的结构&#xff0c;为各行…

鸿蒙 Harmony 初体验

前言 看现在网上传得沸沸扬扬的鸿蒙&#xff0c;打算弄个 hello world 玩一下, 不然就跟不上时代的发展了 环境安装 我的环境 Windows 11 家庭中文版HarmonyOS SDK (API 9)DevEco Studio (3.1.1 Release)Node.js (16.19.1) 开发IDE下载 官方下载链接 配置 nodejs 这里帮…

IT系统可观测性

什么是可观测性 可观测性&#xff08;Observability&#xff09;是指能够从系统的外部输出推断出系统内部状态的能力。在IT和云计算领域&#xff0c;它涉及使用软件工具和实践来收集、关联和分析分布式应用程序以及运行这些应用程序的硬件和网络产生的性能数据流。这样做可以更…

k8s helm 删除 tiller

kuberneter 上面装了 helm 想卸载还并不是那么简单, 参考 stackoverflow 回复 kubectl get -n kube-system secrets,sa,clusterrolebinding -o name|grep tiller|xargs kubectl -n kube-system delete kubectl get all -n kube-system -l apphelm -o name|xargs kubectl dele…

Morris法解决二叉树问题,展开链表及中序遍历

问题一&#xff1a;二叉树展开成单链表 问题二&#xff1a;二叉树中序遍历 咋一看非常简单的两道题&#xff0c;但是如果我们加以一些限制&#xff0c;这两题就不简单了。对于这两道题&#xff0c;我们的空间复杂度都必须控制在O(1)。也就是说&#xff0c;迭代和递归全部失效…

【OpenGL手册19】几何着色器

目录 一、说明 二、渲染管线的逻辑 三、几何着色器 四、使用几何着色器 五、造几个房子 六、几何着色器渲染爆破物体 一、说明 如果说用顶点和片段着色器干了什么&#xff0c;其实不多。加入几何着色器&#xff0c;能够加大渲染能力&#xff0c;简化数据结构&#xff0c;…

网络管理基础

Linux网络管理 1.网络管理概念 网络接口和名称 &#xff1a;网卡 ip地址 网关 主机名称 路由2.管理工具 net-tools: #安装包 ifconfig netstat 准备要废掉了。iproute: #安装包 ip #提供ip命令3.认识网卡 lo网卡 :本地回环网卡&#xff0c;本机上的服务自己访问自…

JAVA八股day1

遇到的问题 相比于包装类型&#xff08;对象类型&#xff09;&#xff0c; 基本数据类型占用的空间往往非常小为什么说是几乎所有对象实例都存在于堆中呢&#xff1f;静态变量和成员变量、成员变量和局部变量的区别为什么浮点数运算的时候会有精度丢失的风险&#xff1f;如何解…

IIS上部署.netcore WebApi项目及swagger

.netcore项目一般是直接双击exe文件&#xff0c;运行服务&#xff0c;今天有个需求&#xff0c;需要把.netcore项目运行在IIS上&#xff0c;遇到了一个小坑&#xff0c;在这里记录一下。 安装IIS&#xff0c;怎么部署站点&#xff0c;这些过于简单就不细说了&#xff0c;不知道…