高精除(信息学奥赛一本通-T1308)
【题目描述】
高精除以高精,求它们的商和余数。
【输入】
输入两个低于300位的正整数。
【输出】
输出商和余数。
【输入样例】
1231312318457577687897987642324567864324567876543245671425346756786867867867
1231312318767141738178325678412414124141425346756786867867867【输出样例】
999999999748590
179780909068307566598992807564736854549985603543237528310337
【源程序】
#include<iostream>
#include<cstring>
using namespace std;
int a[100],b[100],c[100];
int compare(int a[],int b[])//比较a、b,若a>b为1;若a<b为-1;若a=b为0
{ int i; if(a[0]>b[0]) return 1; if(a[0]<b[0]) return -1; for(i=a[0];i>0;i--)//从高位到低位比较 { if(a[i]>b[i]) return 1; if(a[i]<b[i]) return -1; } return 0;
} void subduction(int a[],int b[])//计算a=a-b
{ int flag; int i; flag=compare(a,b); if(flag==0)//相等 { a[0]=0; return; } if(flag==1)//大于 { for(i=1;i<=a[0];i++) { if(a[i]<b[i])//若不够向上借位 { a[i+1]--; a[i]+=10; } a[i]-=b[i]; } while(a[0]>0&&a[a[0]]==0)//删除前导0 a[0]--; return; }
}
int main()
{ char str1[100],str2[100]; int i,j; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>str1>>str2; a[0]=strlen(str1);//a[0]存储串1的位数 b[0]=strlen(str2);//b[0]存储串2的位数 for(i=1;i<=a[0];i++) a[i]=str1[a[0]-i]-'0'; for(i=1;i<=b[0];i++) b[i]=str2[b[0]-i]-'0'; int temp[100]; c[0]=a[0]-b[0]+1; for(i=c[0];i>0;i--) { memset(temp,0,sizeof(temp)); for(j=1;j<=b[0];j++)//从i开始的地方,复制数组b到数组temp temp[j+i-1]=b[j]; temp[0]=b[0]+i-1; while(compare(a,temp)>=0)//用减法模拟 { c[i]++; subduction(a,temp); } } while(c[0]>0&&c[c[0]]==0)//删除前导0 c[0]--; // cout<<"商为:"; if(c[0]==0)//输出结果 cout<<0<<endl; else { for(i=c[0];i>0;i--) cout<<c[i]; cout<<endl; } // cout<<"余数为:"; if(a[0]==0)//输出余数 cout<<0<<endl; else { for(i=a[0];i>0;i--) cout<<a[i]; cout<<endl; } return 0;
}
高精除(信息学奥赛一本通-T1308)相关推荐
- 1308:【例1.5】高精除-信息学奥赛一本通C++实现
#include<iostream> using namespace std; #include<cstdio> #include<cstring>#define ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通 1358:中缀表达式值(expr)
[题目链接] ybt 1358:中缀表达式值(expr) [题目考点] 1. 表达式求值 中缀表达式转后缀表达式 后缀表达式求值 [解题思路] 由于题目要求做中缀表达式转为后缀表达式,而后求值.那么这 ...
- 信息学奥赛一本通 1356:计算(calc)
[题目链接] ybt 1356:计算(calc) [题目考点] 1. 表达式求值 中缀表达式求值 2. 表达式树 表达式树:一棵表达式树可以表示一系列的运算. 表达式树中的结点包括运算符与数值 str ...
- 移动玩具(信息学奥赛一本通-T1453)
[题目描述] 在一个 4×4 的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将 ...
- 信息学奥赛一本通 第五版(C++版)
信息学奥赛一本通 第五版(C++版)第一部分 C++语言 第一章 C++语言入门 第二节 C++语言程序设计 P15 1. 编写一个能够输出Hello,World!的程序,这个程序常常作为一个初学者接 ...
- 信息学奥赛一本通T1451:棋盘游戏
信息学奥赛一本通T1451:棋盘游戏 [题目描述] 在一个 4×4 的棋盘上有 8 个黑棋和 8 个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的.移动棋子的规则是交换相邻两个棋子. 给出一 ...
- 信息学奥赛一本通T1453:移动玩具
信息学奥赛一本通T1453:移动玩具 [题目描述] 在一个 4×4 的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的 ...
最新文章
- js加版本号 webpack_webpack脚手架增加版本号
- 10、angular的全部api
- 使用wowza和xuggler将RTMP转换为RTSP
- mac中如何从vim文本编辑器退回到命令
- DTNSim.java注释摘要(学习性质,有错漏的可能,红色为不明确部分)
- kali linux 安装驱动安装教程,kali linux安装NVIDA显卡驱动教程
- 如何使用RDP报表工具预览页面可以出现完整数据而不是只显示一条
- python调用perl_从Python调用Perl脚本不断返回值
- html静态页面作业家乡网站设计—我的家乡-四川(9页) HTML+CSS+JavaScript 学生DW网页设计作业成品
- js,vue 上传图片前压缩图片(无损压缩,保持在2M以内)
- 华为新员工入职180天培训计划
- angular中$cacheFactory用法(缓存)
- 广告创意设计都有哪些类型
- 531 孤独像素 I
- 红警战网服务器端源码,红色警戒2战网平台完整版
- sklearn sklearn中KFold()的具体用法
- spring boot车辆管理系统毕业设计源码031034
- HTTP传递文件和接收文件处理之MultipartFile
- 修道士和野人过河问题 A*算法 人工智能
- 计算机的基础组成部分