码迷,mamicode.com
首页 > 编程语言 > 详细

【个人模板】高精度算法

时间:2015-07-02 22:21:11      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

一、求两个高精度正数的和差积

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const int MAXN=1000;
 7 char s1[MAXN],s2[MAXN];
 8 int ed1,ed2,n1,n2;
 9 int num1[MAXN];
10 int num2[MAXN];
11 int ans[MAXN];
12 
13 void input()
14 {
15     scanf("%s%s",s1,s2);
16     ed1=strlen(s1)-1;
17     ed2=strlen(s2)-1;
18 }
19 
20 void switchnum()//把字符转换为数字 
21 {
22     memset(num1,0,sizeof(num1));
23     memset(num2,0,sizeof(num2));
24     for (int i=ed1;i>=0;i--) num1[ed1-i]=s1[i]-0;
25     for (int i=ed2;i>=0;i--) num2[ed2-i]=s2[i]-0;
26 }
27 
28 void add()
29 {
30     memset(ans,0,sizeof(ans));
31     int ed=max(ed1,ed2),carry=0;
32     for (int k=0;k<=ed;k++)
33     {
34         ans[k]=num1[k]+num2[k]+carry;
35         carry=ans[k]/10;
36         ans[k]=ans[k]%10;
37     }
38     if (carry>0) 
39     {
40         ed++;
41         ans[ed]=carry;
42     }
43     for (int k=ed;k>=0;k--) cout<<ans[k];cout<<endl;
44 } 
45 
46 void sub()
47 {
48 /*strcmp是字符串比较函数,作用是比较字符串1和字符串2
49 如:strcmp(str1,str2);
50   strcmp("china","korea");
51 比较的结果由函数带回。
52 (1)如果字符串1=字符串2,函数值为0。
53 (2)如果字符串1〉字符串2,函数值为一正整数
54 (3)如果字符串1<字符串2,函数值为一负整数*/ 
55     memset(ans,0,sizeof(ans));
56     int ed=max(ed1,ed2),f=strcmp(s1,s2),deco=0;
57     for (int k=0;k<=ed;k++)
58     {
59         if (f>=0) ans[k]+=num1[k]-num2[k];
60         else ans[k]+=num2[k]-num1[k];
61         if (ans[k]<0)
62         {
63             ans[k]+=10;
64             ans[k+1]--;
65         }
66     }
67     if (0==ans[ed]) ed--; //这里不能写成ans[ed]=0,否则会进行赋值 
68     for (int k=ed;k>=0;k--) cout<<ans[k];cout<<endl;
69 }
70 
71 void mul()
72 {
73     memset(ans,0,sizeof(ans));
74     int ed=ed1+ed2;
75     for (int i=0;i<=ed1;i++)
76         for (int j=0;j<=ed2;j++)
77         {
78             ans[i+j]+=num1[i]*num2[j];
79             if (i+j>0)
80             {
81                 ans[i+j]+=ans[i+j-1]/10;
82                 ans[i+j-1]%=10;
83             } 
84         }
85     for (int k=ed;k>=0;k--) cout<<ans[k];cout<<endl;
86 }
87 
88 int main()
89 {
90     input();
91     switchnum();
92     add();
93     sub();
94     mul();
95     return 0;
96 } 

二、求一个高精度正数和一个低精度正数的商和余数

 1 #include<iostream>
 2 #include<cstring> 
 3 #include<cstdio>
 4 using namespace std;
 5 const int MAXN=1000;
 6 char a[MAXN];
 7 int num[MAXN];
 8 int b,rem;
 9 
10 int main()
11 {
12     scanf("%s%d",a,&b);
13     for (int i=0;i<strlen(a);i++) num[i]=a[i]-0;
14     rem=0; 
15     bool f=false;
16     for (int i=0;i<strlen(a);i++)
17     {
18         rem=rem*10+num[i];
19         if (rem>b) f=true;
20         if (f) cout<<rem/b;
21         rem%=b;
22     }
23     cout<<endl;
24     if (rem!=0) cout<<rem<<endl;
25     return 0; 
26 }

【个人模板】高精度算法

标签:

原文地址:http://www.cnblogs.com/iiyiyi/p/4617136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!