实验八 大数问题

实验名称:实验八 大数问题

实验目的:熟练掌握大数的加减、乘法、除法和高精度计算。

实验内容:

  1. 问题描述:(大数加减)求两个不超过200位的非负整数的和。

输入:有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

输出:一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

输入样例

88888888888888888888

33333333333333333333

输出样例

122222222222222222221

  1. 问题描述:(大数乘法)求两个不超过50位的非负整数的积。

输入:有两行,每行是一个不超过50位的非负整数,没有多余的前导0。

输出:一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

输入样例

12345678900

98765432100

输出样例

1219326311126352690000

  1. 问题描述:(大数除法)求2个大的正整数相除的商。

输入:第1行是测试数据的组数t,每组测试数据占2行,第1行是被除数,第2行是除数。每行数据不超过100个字符。

输出:t行,每组测试数据有一行输出是相应的整数商。

输入样例

3

2405337312963373359009260457742057439230496493930355595797660791082739646

2987192585318701752584429931160870372907079248971095012509790550883793197894

10000000000000000000000000000000000000000

10000000000

5409656775097850895687056798068970934546546546575676768678435435345

1

输出样例

0

1000000000000000000000000000000

5409656775097850895687056798068970934546546546575676768678435435345

  1. 问题描述:(高精度计算)计算国债对于计算机来说是一件很繁重的事情,该问题涉及到的精度很高。现需要你编写一个程序用来计算Rn,这里R是一个实数(0.0<R<99.999),而n是一个整数(n≤30)。

输入:第1行是测试数据的组数t,每组测试数据占1行,每行包括一对数R和n。

输出:对应每组测试数据输出一行Rn的精确值。首尾无意义的零不要输出,如果是整数,不要输出小数点。

输入样例

2

95.123   12

98.999   10

输出样例

548815620517731830194541.899025433415715973535967221869852721

90429072743629540498.107596019456651774561044010001

实验结果与分析(运行界面截图,打开需要截的图,按ALT+PrintScreen后,将光标移到下面,单击右键后选择“粘贴”):

 1.

(Ⅰ)程序代码及注释

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

char s[202];

int sum[201];

int i,j,d,len,maxlen=0;

for(i=0;i<201;i++)

sum[i]=0;

for(i=0;i<2;i++)

{

scanf("%s",s);

len=strlen(s);

if(len>maxlen)maxlen=len;

for(j=len-1;j>=0;j--)

sum[len-1-j]+=s[j]-'0';

}

for(i=0,d=0;i<maxlen;i++)

{

sum[i]+=d;

d=sum[i]/10;

sum[i]%=10;

}

if(d>0)

sum[maxlen++]+=d;

for(i=maxlen-1;i>=0;i--)

s[maxlen-1-i]=sum[i]+'0';

s[maxlen]='\0';

printf("%s\n",s);

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

2.

(Ⅰ)程序代码及注释

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

char sa[51],sb[51],sc[101];

int a[50],b[50],c[100],i,j,k,d,alen,blen;

scanf("%s",sa);

scanf("%s",sb);

for(i=0;i<50;i++)

{

a[i]=0;

b[i]=0;

}

alen=strlen(sa);

i=alen-1;k=0;

while(i>=0)

a[k++]=sa[i--]-'0';

blen=strlen(sb);

i=blen-1;k=0;

while(i>=0)

b[k++]=sb[i--]-'0';

for(i=0;i<100;i++)

c[i]=0;

for(i=0;i<alen;i++)

for(j=0;j<blen;j++)

c[i+j]+=a[i]*b[j];

k=99;

while(k>=0&&c[k]==0)

k--;

i=0;d=0;

while(i<=k)

{

c[i]+=d;

d=c[i]/10;

c[i]%=10;

i++;

}

while(d>0)

{

c[i]=d%10;

d/=10;

i++;

}

k=i;

for(i=k-1;i>=0;i--)

sc[k-1-i]=c[i]+'0';

sc[k]='\0';

printf("%s\n",sc);

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

3.

(Ⅰ)程序代码及注释

#include <stdio.h>

#include <string.h>

#define N 100

int subtract(int *p1,int *p2,int len1,int len2)

{

int i,flarger;

if(len1<len2) return(-1);

flarger=1;

if(len1==len2)

{

for(i=len1-1;i>=0;i--)

{

if(p1[i]>p2[i])break;

if(p1[i]<p2[i])return (-1);

}

}

for(i=0;i<len1;i++)

{

p1[i]-=p2[i];

if(p1[i]<0)

{

p1[i]+=10;

p1[i+1]--;

}

}

for(i=len1-1;i>=0;i--)

if(p1[i])return(i+1);

return (0);

}

int main(int argc, char *argv[])

{

char sa[N+1],sb[N+1],sc[N+1];

int t,i,k,d,alen,blen,ntime;

int a[N],b[N],c[N];

scanf("%d",&t);

while(t-->0)

{

scanf("%s",sa);

scanf("%s",sb);

for(i=0;i<N;i++)

{

a[i]=0;b[i]=0;c[i]=0;//init

}

alen=strlen(sa);

i=alen-1;k=0;

while(i>=0)

a[k++]=sa[i--]-'0';

blen=strlen(sb);

i=blen-1;k=0;

while(i>=0)

b[k++]=sb[i--]-'0';

if(alen<blen)

{

printf("0\n");

continue;

}

ntime=alen-blen;

for(i=alen-1;i>=0;i--)

{

if(i>=ntime) b[i]=b[i-ntime];

else b[i]=0;

}

blen=alen;

for(i=0;i<=ntime;i++)

{

while((k=subtract(a,b+i,alen,blen-i))>=0)

{

alen=k;

c[ntime-i]++;

}

}

k=N-1;

while(k>0&&c[k]==0)k--;

i=0;d=0;

while(i<=k)

{

c[i]+=d;

d=c[i]/10;

c[i]%=10;

i++;

}

while(d>0)

{

c[i]=d%10;

d=d/10;

i++;

}

k=i;

for(i=k-1;i>=0;i--)

sc[k-1-i]=c[i]+'0';

sc[k]='\0';

printf("%s\n",sc);

}

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

4.

(Ⅰ)程序代码及注释

#include <stdio.h>

#include <string.h>

#define N 150

void mult(int *p1,int *p2,int len1,int *len2)

{

int i,j,k,d,ts[N];

for(i=0;i<N;i++)

ts[i]=0;

for(i=0;i<len1;i++)

for(j=0;j<*len2;j++)

ts[i+j]+=p1[i]*p2[j];

k=len1+(*len2);

for(i=0,d=0;i<k;i++)

{

p2[i]=(ts[i]+d)%10;

d=(ts[i]+d)/10;

}

if(d>0)

{

p2[i]=d;

k++;

}

*len2=k;

}

int main(int argc, char *argv[])

{

char sa[8],sb[N+1];

int t,i,j,k,alen,blen,n,pot;

int a[8],b[N];

scanf("%d",&t);

while(t-->0)

{

scanf("%s%d",sa,&n);

alen=strlen(sa);

k=alen-1;

while(k>=0&&sa[k]!='.')k--;

if(k<0)pot=0;

else{

j=alen-1;

while(j>0&&sa[j]=='0')j--;

alen=j+1;

sa[alen]='\0';

pot=alen-k-1;

}

i=alen-1;k=0;

while(i>=0)

{

if(sa[i]!='.')a[k++]=sa[i]-'0';

i--;

}

for(i=0;i<N;i++)

b[i]=0;

alen=blen=k;

for(i=0;i<alen;i++)

b[i]=a[i];

for(i=1;i<n;i++)

mult(a,b,alen,&blen);

k=pot*n;

n=blen>k?blen:k;

for(j=0,i=n-1;i>=0;i--)

{

if(i==k-1)sb[j++]='.';

sb[j++]=b[i]+'0';

}

sb[j]='\0';

printf("%s\n",sb);

}

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

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

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

相关文章

Antd Vue3 使用 Anchor 锚点组件记录

项目场景 客户要求做一个表单页面&#xff0c;表单数据分为三步&#xff0c;每一步骤是一个单独的 Vue 组件&#xff0c;表单上方需要使用锚点组件实现锚点定位到每一步的功能。 代码总览 <template><div class"guided-form-content-wrapper"><!-- …

初步了解C++

目录 一&#xff1a;什么是C&#xff1f; 二.C发展史 三:C关键字 四&#xff1a;命名空间 4.1命名空间的介绍 4.2命名空间的使用 4.3命名空间的使用 4.3.1使用作用域限定符 4.3.2 使用using将命名空间的某个成员引入 4.3.3使用using把整个命名空间展开 4.4命名空…

每天学习一个Linux命令之scp

每天学习一个Linux命令之scp 在Linux系统中&#xff0c;scp&#xff08;Secure Copy&#xff09;是一个用于在本地主机和远程主机之间进行文件传输的命令行工具。它基于SSH协议&#xff0c;通过加密方式传输文件&#xff0c;确保传输的安全性和完整性。scp命令非常强大且使用简…

【蓝桥杯选拔赛真题50】C++简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C简易炸弹超人 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 有一块矩形游戏场地&#x…

聊聊k8s服务发现的优缺点

序 本文主要研究一下使用k8s服务发现的优缺点 spring cloud vs kubernetes 这里有张spring cloud与kubernetes的对比&#xff0c;如果将微服务部署到kubernetes上面&#xff0c;二者有不少功能是重复的&#xff0c;可否精简。 这里主要是讲述一下如果不使用独立的服务发现&am…

Linux renice命令教程:如何优雅地调整进程优先级(附案例详解和注意事项)

Linux renice命令介绍 renice命令在Linux中用于修改已经运行的进程的优先级。这个命令允许你改变一个已经运行的进程的调度优先级。如果我们给一个进程设置了更高的优先级&#xff0c;那么内核将为该进程分配更多的CPU时间。 Linux renice命令适用的Linux版本 renice命令在所…

校验器选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理2.1,数据写入2.2,数据读取2.3,错误检测2.4,错误纠正2.5,错误处理3,结构特点3.1,输入接口3.2,校验规则3.3,错误处理机制3.4,可配置性3.5,性能优化<

css之flex布局文本不换行不显示省略号的解决方法

文章目录 一、单行长文本显示省略号二、flex布局下的处理技巧 一、单行长文本显示省略号 先讲讲常规情况下长文本不跨行显示省略号的代码&#xff1a; overflow: hidden; //不允许内容超出盒子 white-space: nowrap; //不允许文本跨行 text-overflow: ellipsis; //文本超…

SpringMVC注解及使用规则

文章目录 前言一、SpringMVC注解是什么&#xff1f;二、使用步骤1.注解使用2创建JSP3 SpringMVC视图1. 逻辑视图&#xff08;Logical View&#xff09;2. 物理视图&#xff08;Physical View&#xff09;区别和关系 4 SpringMVC注解总结 总结 前言 提示&#xff1a;这里可以添…

建立一个简单的网页音乐盒模型效果#css#h5

“音乐盒”可以看做一个大盒子&#xff0c;用<div>标签进行定义。大盒子的上面为文本内容&#xff0c;可以在<div>标签中嵌套<h2>和<p>标签来实现&#xff1b;大盒子下面为图像&#xff0c;通过在<div>标签中嵌套<img/>标签来实现。 样式…

c语言bit位定义--位域的分配是怎样的? 最先定义的在最低位

//author: hjjdebug //date: 2024年 03月 29日 星期五 14:37:38 CST //c语言bit位定义--位域的分配是怎样的? 最先定义的在最低位 #include <stdio.h> typedef struct { unsigned int is_error : 1; // unsigned int : 29; // 29位不用 unsigned int is_…

RK3588平台开发系列讲解(开发环境搭建)

目录 准备开发环境 安装库和工具集 检查和升级主机的 python 版本 检查和升级主机的 make 版本 检查和升级主机的 lz4 版本 检查和升级主机的 git 版本 准备开发环境 推荐使⽤ Ubuntu 22.04 或更⾼版本的系统进⾏编译。其他的 Linux 版本可能需要对软件包做相应调 整。除…

[Python人工智能] 四十五.命名实体识别 (6)利用keras构建CNN-BiLSTM-ATT-CRF实体识别模型(注意力问题探讨)

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。这篇文章将详细结合如何利用keras和tensorflow构建基于注意力机制的CNN-BiLSTM-ATT-CRF模型,并实现中文实体识别…

notepad++里安装32位和64位的16进制编辑器Hex-Editor

这个16进制编辑器确实是个好东西&#xff0c;平时工作种会经常用到&#xff0c; 这是hex-editor的官网。这个里边只能下载32位的(64位的看最下边)&#xff0c;选一个合适的版本&#xff0c;我当时选的是最新的版本 https://sourceforge.net/projects/npp-plugins/files/Hex%20E…

android 屏蔽系统通知

1.源码路径: frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java​ 2.NotificationListener类是负责处理监听通知更新并将其传递给向用户显示的NotificationPresenter,也就是SystemUI中监听到系统通知的起点. public class No…

奇偶生成器选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2,工作原理2.1,输入数据2.2,奇偶校验位选择2.3,数据处理2.4,输出校验位2.5,错误检测2.6,控制逻辑3,结构特点3.1,输入接口3.2,处理核心3.3,输出接口4,

ARP协议定义及工作原理

ARP的定义 地址解析协议(Address Resolution Protocol&#xff0c;ARP)&#xff1a;ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说&#xff0c;所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议&a…

Centos服务器Open Gauss 部署

近期很多的项目由于信创要求使用一些国产的数据库&#xff0c;比如OpenGauss。OpenGuass是华为高斯DB的开源版&#xff0c;内核还是PostgreSQL&#xff0c;商业版是收费的。这里记录一下是如何安装部署 的。 官方中文文档 官方下载地址 部署要求 操作系统要求 ARM&#xff…

拆分巨石:将MVPS和MVAS应用于遗留应用程序——可持续架构(六)

前言 MVP 和 MVA 的概念不仅适用于新应用程序&#xff1b;它们提供了一种新颖的方式来审视对遗留系统的范围变更&#xff0c;以防止过快地承担过多的变化 - 参见图1。MVA 可以帮助组织评估和更新其技术标准&#xff0c;通过展示新技术如何真正对支持 MVP 至关重要。创建 MVA 可…

绿联 安装PDF工具

这是一个强大的本地托管的基于 Web 的 PDF 操作工具&#xff0c;使用 docker&#xff0c;允许您对 PDF 文件执行各种操作&#xff0c;例如拆分、合并、转换、重组、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序最初是 100% ChatGPT 制作的应用程序&#xff0c;现已发展…