高精度除法

本来想直接一个一个地减的~~~~

太耗时了。

 1 #include<iostream>
 2 #include<cstring>
 3 int lena,lenb,lenc,lend,lene;
 4 int comp(int d[],int b[])
 5 {
 6     int len;
 7     if(lend>lenb) len=lend;
 8     else len=lenb;
 9     while(len>=1&&d[len-1]==b[len-1]) len--;
10     if(len==0) return 0;
11     else return d[len-1]-b[len-1];
12 }
13 void k(int d[])
14 {
15     int i;
16     for(i=lend-1;i>=0;i--)
17         d[i+1]=d[i];
18     d[0]=0;
19     lend++;
20 }
21 void chf(int d[],int b[],int e[])
22 {
23     int i,j,len;
24     if(lend>lenb)len=lend;
25     else len=lenb;
26     for(i=0;i<len;i++)
27     {
28         e[i]+=d[i]-b[i];
29         if(e[i]<0)
30         {
31             e[i+1]--;
32             e[i]+=10;
33         }
34     }
35     while(len>1&&e[len-1]==0)len--;
36     lene=len;
37 }
38 void ch(int a[],int b[],int c[],int d[])
39 {
40     int e[1000];
41     int i,j,len;
42     len=lena;
43     lend=0;
44     for(i=len-1;i>=0;i--)
45     {
46         k(d);
47         d[0]=a[i];
48         while(comp(d,b)>=0)
49         {
50            memset(e,0,sizeof(e));
51            chf(d,b,e);
52            memcpy(d,e,sizeof(e));
53            lend=lene;
54            c[i]++;
55         }
56     }
57     while(len>1&&c[len-1]==0) len--;
58     lenc=len;
59 }
60 int main()
61 {
62     int i,j;
63     char sa[10001],sb[10001];
64     int a[10001],b[10001],c[10001],d[10001];
65     scanf("%s%s",sa,sb);
66     memset(c,0,sizeof(c));
67     memset(a,0,sizeof(a));
68     memset(b,0,sizeof(b));
69     memset(d,0,sizeof(d));
70     lena=strlen(sa);
71     lenb=strlen(sb);
72     for(j=0,i=lena-1;i>=0;i--) a[j++]=sa[i]-48;
73     for(j=0,i=lenb-1;i>=0;i--) b[j++]=sb[i]-48;
74     ch(a,b,c,d);
75     for(i=lenc-1;i>=0;i--)
76     printf("%d",c[i]);
77     printf("\n");
78     for(i=lend-1;i>=0;i--) printf("%d",d[i]);
79 }

时间: 2024-11-08 21:36:14

高精度除法的相关文章

【算法:1】高精度除法

高精度除法,我用高精度减法来模拟 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<string> using namespace std; inline int read() { int x=0,f=1;char ch=getchar();

中石油-高精度除法-java版

问题 G: [高精度]高精度数除以低精度数I 时间限制: 1 Sec  内存限制: 512 MB提交: 19  解决: 15[提交][状态][讨论版] 题目描述 修罗王聚集了庞大的暗元素以施展隐匿魔法,该魔法施展后将对其周边的时空产生隐匿效果,当然,隐匿的效果好坏取决于是否将暗元素平均地分配在其周边时空,显然这涉及高精度除法的编程.考虑到邪狼的理解能力,修罗王不得不先将问题简化为:输入一被除数(位数≤5000),输入一除数(整型数据范围内),输出整数商,忽略小数. 输入 共两行,第1行为一个数字

poj 2635 The Embarrassed Cryptographer 筛素数+高精度除法

题意: 给K(<10^100),L(<10^6),求K小于L的最小素因子并输出,如果没有则输出GOOD. 分析: 枚举小于L的素数用高精度除法判断是否是因子,关键是怎么高效筛素数,先给一种比较慢的筛法: primes[max_prime_num],num=0; memset(vis,0,sizeof(vis)) for(int i=2;i<maxL;++i) if(vis[i]==0){ prime[num++]=i; for(int j=2*i;j<maxL;j+=i) vis[

POJ 2325 Persistent Numbers#贪心+高精度除法

(- ̄▽ ̄)-* 这道题涉及高精度除法,模板如下: char s[1005]; char division[1005];//存储进行高精度除法的数据 bool bignum_div(int x) { int tot=0,num=0; for(int i=0;s[i];i++) { num=num*10+s[i]-'0'; division[tot++]=num/x+'0'; num%=x; } division[tot]='\0';//利于进行strcpy() if(num==0) //有适合的

【算法学习笔记】34.高精度除法 SJTU OJ 1026/1016

高精度除法, 这个和加减乘一样,我们都要从手算的角度入手.举一个例子,比如 524134 除以 123.结果是4261 第一位4的来源是 我们把 524和123对齐,然后进行循环减法,循环了4次,余32,将32134的前三位321继续和123对齐,循环减法2次,余75,把7534的前三位753和123对齐,循环减法6次,余15,将154和123对齐,只能减1次,所以结果是4 2 6 1. 把上述过程程序化 1.把A,B两个数存入char数组 0下标表示的是最高位2.把A的前lenB位和B对齐进行

使用java求高精度除法,要求保留N位小数

题目要求是高精度除法,要求保留N位小数(四舍五入),并且当整数部分为0时去除0的显示 1 import java.math.BigDecimal; 2 import java.util.Scanner; 3 4 public class BD 5 { 6 public static void main(String[] args) 7 { 8 Scanner scanner = new Scanner(System.in); 9 while(scanner.hasNext()) 10 { 11

高精度除法(大数相除)

高精度除法(高除高) #include<cmath> #include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; int a[101],b[101],c[101],d,i; void shuru(int a[]) { string s; cin>>s; //读入字符串 a[0]=s.length(); //a[0

[结论][高精度除法]JZOJ 3771 小Z的烦恼

Description 小 Z 最近遇上了大麻烦,他的数学分析挂科了.于是他只好找数分老师求情. 善良的数分老师答应不挂他,但是要求小 Z 帮助他一起解决一个难题问题是这样的,现在有 n 个标号为 1-n 的球和 m 个盒子,每个球都可以放进且只能放进一个盒子里面,但是要满足如下的规则: 1.  若把标号为 i 的球放进了第 j 个盒子,那么标号为 2*i 的球一定要在第 j+1 个盒子里面(若 j<m) 2.  若把标号为 i 的球放进了第 j 个盒子,并且 k*2=i,那么标号为 k 的球一

AcWing 794.高精度除法

AcWing 794.高精度除法 题目描述 给定两个正整数A,B,请你计算 A / B的商和余数. 输入格式 共两行,第一行包含整数A,第二行包含整数B. 输出格式 共两行,第一行输出所求的商,第二行输出所求余数. 数据范围 1≤A的长度≤100000, 1≤B≤10000 输入样例 7 2 输出样例 3 1 题目思路 低角标存低位,高角标存高位:按位依次向后除,A[i]除整个b,余数进位 #include<iostream> #include<string> #include&l

【练习赛2补题】poj 2325 Persistent Numbers 【高精度除法+贪心】

Description The multiplicative persistence of a number is defined by Neil Sloane (Neil J.A. Sloane in The Persistence of a Number published in Journal of Recreational Mathematics 6, 1973, pp. 97-98., 1973) as the number of steps to reach a one-digit