首页 > 代码库 > 高精度特别策划 加减乘除余~~~
高精度特别策划 加减乘除余~~~
P1932 A+B & A-B & A*B & A/B Problem
题目背景
这个题目很新颖吧!!!
题目描述
求A、B的和差积商余!
输入输出格式
输入格式:
两个数两行
A B
输出格式:
五个数
和 差 积 商 余
输入输出样例
输入样例#1:
11
输出样例#1:
20110
说明
length(A),length(B)<=10^4
每个点3s。
代码
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <string> 5 6 using namespace std; 7 8 typedef int hp[20002]; 9 hp a,b,c,d; 10 int l1,l2,l3,i,code; 11 string n1,n2; 12 void init(hp a) { 13 string s; 14 int i; 15 memset(a,0,sizeof(int)*20002); 16 cin >> s; 17 a[0] = s.length(); 18 for(i=1;i<=a[0];i++) { 19 a[i]=s[a[0]-i]-48; 20 } 21 } 22 23 void print(hp a) { 24 int i; 25 for(int i=a[0]; i>=1; i--) cout << a[i]; 26 cout << endl; 27 } 28 29 void clear(hp a) { 30 int i; 31 for(int i=1;i<=a[0];i++) { 32 a[i+1]+=a[i]/10; 33 a[i]%=10; 34 } 35 while((a[a[0]]==0) && (a[0]>1)) a[0]--; 36 } 37 38 int compare(hp a, hp b) { 39 int i; 40 clear(a); 41 clear(b); 42 if(a[0]>b[0]) { 43 return 1; 44 } 45 if(a[0]<b[0]) { 46 return -1; 47 } 48 for(i=a[0]; i>=1; i--) { 49 if(a[i]>b[i]) { 50 return 1; 51 } 52 if(a[i]<b[i]) { 53 return -1; 54 } 55 } 56 return 0; 57 } 58 59 void plus1(hp a, hp b, hp c) { 60 int i; 61 memcpy(c,a,sizeof(int)*20002); 62 if(b[0]>c[0]) c[0]=b[0]; 63 for(int i=1;i<=b[0];i++) { 64 c[i]+=b[i]; 65 } 66 c[0]++; 67 clear(c); 68 } 69 70 void minus1(hp a, hp b, hp c) { 71 int i; 72 hp t; 73 bool flag = false; 74 if(compare(a,b)<0) { 75 memcpy(c,b,sizeof(int)*20002); 76 memcpy(t,b,sizeof(int)*20002); 77 memcpy(b,a,sizeof(int)*20002); 78 flag = true; 79 } else memcpy(c,a,sizeof(int)*20002); 80 for(i=1;i<=c[0];i++) { 81 c[i+1]--; 82 c[i]+=10-b[i]; 83 } 84 clear(c); 85 if(flag) memcpy(b,t,sizeof(int)*20002); 86 } 87 88 void multiply(hp a, hp b, hp c) { 89 int i,j; 90 memset(c, 0, sizeof(int)*20002); 91 for(i=1; i<=a[0];i++) 92 for(j=1;j<=b[0];j++) 93 c[i+j-1]+=a[i]*b[j]; 94 c[0]=a[0]+b[0]; 95 clear(c); 96 } 97 98 void divide(hp a, hp b, hp c, hp d) { 99 int i,j,p;100 memset(c, 0, sizeof(int)*20002);101 memset(d, 0, sizeof(int)*20002);102 c[0]=a[0]; d[0]=1;103 for(j=a[0]; j>=1;j--) {104 d[0]++;105 for(p=d[0];p>=2;p--) {106 d[p]=d[p-1];107 }108 d[1]=a[j];109 while(compare(d,b)>=0) {110 c[j]++;111 minus1(d,b,d);112 }113 }114 clear(c);115 clear(d);116 }117 118 int main() {119 init(a);120 init(b);121 plus1(a,b,c);122 print(c);123 minus1(a,b,c);124 print(c);125 multiply(a,b,c);126 print(c);127 divide(a,b,c,d);128 print(c);129 print(d);130 }
高精度特别策划 加减乘除余~~~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。