• 高精度四则运算之加法实现——参考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]='';
    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 }

  • 相关阅读:
    hdu5247找连续数(打表)
    hdu5246超级赛亚ACMer
    hdu5246超级赛亚ACMer
    cf534D 枚举握手次数
    cf534D 枚举握手次数
    4467奇妙的方式优化暴力的01边查询
    4467奇妙的方式优化暴力的01边查询
    POJ1364基本的查分约束问题
    POJ1364基本的查分约束问题
    poj1509最小表示法
  • 原文地址:https://www.cnblogs.com/jieforever/p/4708449.html
Copyright © 2020-2023  润新知