高精度大数(超long long)取余原理及模板

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 高精度大数(超long long)取余原理及模板

高精度大数取余普通版

大数取余的原理: 从字符串的首位开始,对其取余,并将余数存起来与后一位连接(非相加),继续取余。

其实就是模拟我们手算时的过程

例如 562对3取余
取首位 5 % 3=2
取第二位 并加上之前的余数 (2* 10+6)%3=2
取第三位 同样加上之前的余数 (2*10+2)%3=4
得到 562%3=4


long long ans=0;
for (int i = 0; i < num.size(); i++) {
  ans=(ans*10+num[i]-'0')%mod;//mod是需要取余的数,ans为结果
}

高精度大数取余快速版(局部有序,整体有序)

1

一位一位取对于一些题目来说可能有点慢,那么采用三位,四位取余的方法

char k[105];
  int a[40];
  scanf("%s",k);//输入字符串
  int len=strlen(k)-1;
  int ans=0;
  for(int i=0; i<=len; i=i+3) {
    int cnt=0;
    int ff=0;
    for(int j=0; j<=2; j++) {
      if(i+j>len)
        break;
      cnt=cnt*10+k[i+j]-'0';
      if(ff==0) {
        ans++;
        ff=1;
      }
    }
    a[ans]=cnt;//三位一个存储到数组a
  }

这里采用局部有序,整体有序的方法

int cnt=0,xx=0;
  for(int j=1; j<=ans; j++) {
    if(a[j]<10 &&j==ans)
      xx=10;
    else if(a[j]<100 &&j==ans)
      xx=100;
    else
      xx=1000;
    cnt=(cnt*xx+a[j])%mod;
  }
  cout<<cnt;

发现最后一个a[i]可能是一位数,二位数,三位数,所以模板也要做出修改

2

会发现这样写代码有点繁琐了,能不能做出一点修改使得代码变得更加简洁呢

char k[105];
  int a[40];
  scanf("%s",k);//输入字符串
  int len=strlen(k)-1;
  int ans=0;
  int top=(len+1)%3;
  int cnt1=0;
  for(int i=0;i<top;i++){
    cnt1=cnt1*10+k[i]-'0';
  }
  a[++ans]=cnt1;
  for(int i=top; i<=len; i=i+3) {
    int cnt=0;
    int ff=0;
    for(int j=0; j<=2; j++) {
      if(i+j>len)
        break;
      cnt=cnt*10+k[i+j]-'0';
      if(ff==0) {
        ans++;
        ff=1;
      }
    }
    a[ans]=cnt;//三位一个存储到数组a
  }

int cnt=0,xx=1000;
  for(int j=1; j<=ans; j++) {
    cnt=(cnt*xx+a[j])%mod;
  }
  cout<<cnt;

此时只要更改一下字符串存储到数组a中的方式即可

四位数,五位数同理即可


目录
相关文章
|
机器学习/深度学习 自然语言处理 算法
文本分析-使用jieba库进行中文分词和去除停用词(附案例实战)
文本分析-使用jieba库进行中文分词和去除停用词(附案例实战)
11381 145
|
算法 编译器 数据库
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
1326 0
|
Python
Pycharm一直卡在connecting to console的解决办法[图文步骤]
之前因为重新装了电脑系统导致有些开发软件因为不是安装在C盘的,所以没有卸载但有些环境被改变了,所以使用不正常,今天在使用pycharm的时候,打开出现了connecting to console,并且一直卡在这里
3630 0
Pycharm一直卡在connecting to console的解决办法[图文步骤]
|
人工智能 自然语言处理 Rust
【内附榜单】评估AI大模型的代码修复能力!Multi-SWE-bench:字节开源代码修复能力评估基准,覆盖7大主流编程语言
Multi-SWE-bench是首个覆盖Python外7种主流编程语言的代码修复基准,包含1632个真实GitHub问题样本,通过严格筛选与人工验证确保数据质量。
1430 0
【内附榜单】评估AI大模型的代码修复能力!Multi-SWE-bench:字节开源代码修复能力评估基准,覆盖7大主流编程语言
|
8月前
|
传感器 人工智能 监控
停车场空车位检测数据集(3000张图片已划分)[目标检测]
在城市交通管理与智慧停车建设快速发展的当下,如何高效、精准地识别停车场空车位已成为智慧城市重要课题。为了支持研究者和工程团队训练高性能停车检测模型,我们构建了停车场空车位检测数据集,专为目标检测任务优化设计。
停车场空车位检测数据集(3000张图片已划分)[目标检测]
|
12月前
|
监控 前端开发 安全
一个 经典的 聚合支付 (支付中台) 设计与实现 (图解+秒懂+史上最全)
一个 经典的 聚合支付 (支付中台) 设计与实现 (图解+秒懂+史上最全)
|
算法 调度
【操作系统】处理机调度的基本概念和三个层次、进程调度的时机和方式、调度器、闲逛线程
【操作系统】处理机调度的基本概念和三个层次、进程调度的时机和方式、调度器、闲逛线程
1731 3
|
算法
路径规划算法 - 求解最短路径 - Dijkstra(迪杰斯特拉)算法
路径规划算法 - 求解最短路径 - Dijkstra(迪杰斯特拉)算法
1698 0
|
前端开发
[巨详细]使用HBuilder-X新建uniapp项目教程
【6月更文挑战第6天】安装HBuilder-X 详细步骤可看上文》》 启动uniapp项目 先打开HBuilder-X
1311 5
|
安全 算法 编译器
【C++ 静态断言的技巧】掌握C++中static_assert的力量:深入探讨编译时检查
【C++ 静态断言的技巧】掌握C++中static_assert的力量:深入探讨编译时检查
723 1