高精度四则运算之加法实现——参考ACM/ICPC程序设计与分析(c++实现)chapter4

 1 #include <cstdlib>
 2 #include <iostream>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 const int MAXLEN=100;
 7 
 8 int*Str2Int(char*str)
 9 {
10   int i,len=strlen(str);
11   int*a=new int[(len+1)*sizeof(int)];
12   for(i=0;i<len;i++) a[i]=(int)str[len-i-1]-48;
13   return a;
14 }
15 
16 int check(int* a,int n)//规整 
17 {
18    int k=0,len=n;
19    while(a[len-1]==0&&len>1) len--;
20    for(k=0;k<len;k++)
21    {
22       if(a[k]>=10)
23       {
24           a[k+1]=a[k+1]+a[k]/10;
25           a[k]=a[k]%10;
26       } 
27    
28    }
29    if(a[k]!=0) len=k+1;
30    return len;
31     
32 }
33 
34 char* Int2Str(int* a,int n)
35 {
36    int i;
37    char* str=new char[(n+1)*sizeof(char)];
38    for(i=0;i<n;i++) str[i]=(char)a[n-i-1]+48;
39    str[n]='\0';
40    return str;
41 
42 } 
43 
44 
45 
46 //加法:输入两个用字符数组表示的长整数m1,m2
47 //返回一个字符数组指针,指向m1+m2的和
48 char* addition(char* m1,char*m2)
49 {
50 int i,len1,len2,len,c=0;
51 int*t1,*t2;
52 len1=strlen(m1);len2=strlen(m2);
53 len=max(len1,len2);
54 t1=new int[(len+2)*sizeof(int)]; 
55 t2=new int[(len+2)*sizeof(int)];
56 t1=Str2Int(m1);
57 t2=Str2Int(m2);
58 for(i=len1;i<len+1;i++) t1[i]=0;
59 for(i=len2;i<len+1;i++) t2[i]=0;
60 for(i=0;i<len;i++) t1[i]=t1[i]+t2[i];
61 len=check(t1,len);
62 return Int2Str(t1,len);
63 } 
64 
65 
66 
67 int main(int argc, char *argv[])
68 { char s1[MAXLEN],s2[MAXLEN];
69  while(cin>>s1>>s2)
70  cout<<addition(s1,s2)<<endl;
71     
72     system("PAUSE");
73     return EXIT_SUCCESS;
74 }

转载于:https://www.cnblogs.com/jieforever/p/4708449.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值