python高精度乘法_高精度运算

今天模拟,很巧的是我前两天刚看过这个qwq

某人为数不多的写了blog的题解

我麻了,这个人怎么会是我师父

高精度运算需要使用python

因为在十进制,int最多十位,long long最多十九位,

要算比这个还大的数,就要把它拆成一位一位,模拟列竖式计算,也就是高精度

输入和输出

chars1[maxn],s2[maxn];int d1[maxn],d2[maxn];

首先把两个数以字符串的形式读入,然后把它们转化成int;

for(int i = 0; i <= len1; i++) d1[len1-i] = s1[i]-'0';

(这么写的好处是,数组的下标由原来的0~len-1变成了1~len)

计算;

最后倒序输出,忽略前导0。只剩一位的时候0要保留。

while(k>1) {if(ans[k])break;

k--;

}for(int i = k; i; i--) printf("%d",ans[i]);

高精度加法

计算时,注意判断是否进位。加法最多只能进一位,所以$ans[i+1]+1,ans[i]-10$即可。

#include#include#include#include#include#include

#define MogeKo qwq

using namespacestd;const int maxn = 1e6+10;chars1[maxn],s2[maxn];intlen1,len2,k;intd1[maxn],d2[maxn],ans[maxn];intmain() {

scanf("%s",s1);

scanf("%s",s2);

len1= strlen(s1),len2 =strlen(s2);for(int i = 0; i <= len1; i++) d1[len1-i] = s1[i]-'0';for(int i = 0; i <= len2; i++) d2[len2-i] = s2[i]-'0';while(++k <=max(len1,len2)) {

ans[k]+= d1[k]+d2[k];if(ans[k]>=10) {

ans[k+1]++;

ans[k]-= 10;

}

}while(k>1) {if(ans[k])break;

k--;

}for(int i = k; i; i--)printf("%d",ans[i]);return 0;

}

+

高精度减法

同理,只能借一位,$ans[i+1]-1,ans[i]+10$。

注意:需要先判断答案的正负,先比较两个数字的位数,再一位一位比较,

如果前面的较小,则交换两个数组并输出负号。相等则按正数算。

#include#include#include#include#include#include

#define MogeKo qwq

using namespacestd;const int maxn = 1e6+10;chars1[maxn],s2[maxn];intlen1,len2,k;intd1[maxn],d2[maxn],ans[maxn];boolcheck() {if(len1 > len2)return true;if(len1 < len2)return false;for(int i = len1; i; i--) {if(d1[i]>d2[i])return true;if(d1[i]

}return true;

}intmain() {

scanf("%s",s1);

scanf("%s",s2);

len1= strlen(s1),len2 =strlen(s2);for(int i = 0; i <= len1; i++) d1[len1-i] = s1[i]-'0';for(int i = 0; i <= len2; i++) d2[len2-i] = s2[i]-'0';if(!check()) {

printf("-");

swap(d1,d2);

swap(len1,len2);

}while(++k <=max(len1,len2)) {

ans[k]+= d1[k]-d2[k];if(ans[k]<0) {

ans[k+1]--;

ans[k]+= 10;

}

}while(k>1) {if(ans[k])break;

k--;

}for(int i = k; i; i--)printf("%d",ans[i]);return 0;

}

-

高精度乘法

设第一个数枚举到$d[i]$,第二个数枚举到$d[j]$,则当前算出来的的数字为$ans[i+j-1]$。

可能进不止一位,则$ans[i+1]+ans[i]/10,ans[i] mod 10$。

注意数据范围,数组的大小应为$n^2$

#include#include#include#include#include#include

#define MogeKo qwq

using namespacestd;const int maxn = 1e6+10;chars1[maxn],s2[maxn];intlen1,len2,k;intd1[maxn],d2[maxn],ans[maxn];intmain() {

scanf("%s",s1);

scanf("%s",s2);

len1= strlen(s1),len2 =strlen(s2);for(int i = 0; i <= len1; i++) d1[len1-i] = s1[i]-'0';for(int i = 0; i <= len2; i++) d2[len2-i] = s2[i]-'0';for(int i = 1;i <= len1;i++)for(int j = 1;j <= len2;j++){int t = i+j-1;

ans[t]+= d1[i] *d2[j];if(ans[t]>=10){

ans[t+1] += ans[t]/10;

ans[t]%= 10;

}

}

k= len1+len2+1;while(k>1) {if(ans[k])break;

k--;

}for(int i = k; i; i--)printf("%d",ans[i]);return 0;

}

*

高精度阶乘

当要求一个较大数的阶乘时,需要应用到高精度乘法。

$n! = n*(n-1)!$,

用当前枚举到的数$n$与已经得到的数$(n-1)!$的各个数位相乘,即低精度*高精度。

注意这里不能直接$ans[i+1]+ans[i]/10$。因为$ans[i+1]$下一步还要与$n$相乘,乘法的优先级高于加法的优先级。

可以用一个$tem$记录进位,$ans[i+1]$完成乘法操作后再加上$tem$。

注意,枚举答案的每一位时,每次记录答案现在的位数比较麻烦,可以每次枚举到可能的最大值。

估算N的阶乘位数可以用斯特林公式……emm还是算了吧。

(100!约有158位,1000!约有2568位,10000!约有35660位)

#include#include#include#include#include#include

#define MogeKo qwq

using namespacestd;const int maxn = 1e6+10;intn,k,t;intans[maxn];intmain() {

scanf("%d",&n);

ans[1] = 1;

k= 10000;for(int i = 1;i <= n;i++)for(int j = 1;j <= k;j++){

ans[j]*=i;

ans[j]+=t;

t= 0;if(ans[j]>=10){

t= ans[j]/10;

ans[j]%= 10;

}

}while(k>1) {if(ans[k])break;

k--;

}for(int i = k; i; i--)printf("%d",ans[i]);return 0;

}

!

(然而并不会写除法)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值