程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 高精度計算

高精度計算

編輯:C++入門知識

[cpp]   // 高精度加法   #include<iostream>   #include<cstring>   using namespace std;   int* strtoint(char *str)   {       int i,len=strlen(str);       int* a=new int[(len+1)*sizeof(int)];       for(i=0;i<len;i++)           a[i]=(int)str[len-i-1]-48;       return a;   }   char* inttostr(int* a,int n)   {       int i;       char* str=new char[(n+1)*sizeof(char)];       for(i=0;i<n;i++)           str[i]=(char)a[n-i-1]+48;       str[n]='\0';       return str;   }   int check(int* a,int n)   {       int k=0,len=n;       while(a[len-1]==0&&len>1)           len--;       for(k=0;k<len;k++)       if(a[k]>=10)       {          a[k+1]=a[k+1]+a[k]/10;          a[k]=a[k]%10;       }       if(a[k]!=0)           len=k+1;       return len;   }   char* addition(char* m1,char* m2)   {     int i,len1,len2,len,c=0;     int* t1,*t2;     len1=strlen(m1);     len2=strlen(m2);     len=(len1>=len2)?len1:len2;     t1=new int[(len+2)*sizeof(int)];     t2=new int[(len+2)*sizeof(int)];     t1=strtoint(m1);     t2=strtoint(m2);     for(i=len1;i<len+1;i++)       t1[i]=0;     for(i=len2;i<len+1;i++)       t2[i]=0;     for(i=0;i<len;i++)       t1[i]+=t2[i];       len=check(t1,len);       return inttostr(t1,len);   }   int main()   {       char m1[1000],m2[1000];       while(cin>>m1>>m2)       cout<<addition(m1,m2)<<endl;       return 0;   }   //高精度乘法   #include<iostream>   #include<cstring>   using namespace std;   int* strtoint(char* str)   {       int i,len;       len=strlen(str);       int* a=new int[(len+1)*sizeof(int)];       for(i=0;i<len;i++)       a[i]=(int)str[len-i-1]-48;       return a;   }   char* inttostr(int* a,int n)   {       char* str=new char[(n+1)*sizeof(int)];       for(int i=0;i<n;i++)       str[i]=(char)a[n-i-1]+48;       str[n]='\0';       return str;   }   int check(int* a,int n)   {       int k,len=n;       while(a[len-1]==0&&len>1)             len--;       for(k=0;k<len;k++)       {           a[k+1]+=a[k]/10;           a[k]%=10;       }       if(a[k]!=0)           len=k+1;       return len;   }      char* multiply(char* m1,char* m2)   {       int i,j,len1,len2,len,c=0,*t1,*t2,*prod;       len1=strlen(m1);       len2=strlen(m2);       len=len1+len2;       t1=new int[(len1+1)*sizeof(int)];       t2=new int[(len2+1)*sizeof(int)];       prod=new int[(len+1)*sizeof(int)];       t1=strtoint(m1);       t2=strtoint(m2);       for(i=0;i<len+1;i++)           prod[i]=0;       for(i=0;i<len1;i++)           for(j=0;j<len2;j++)           prod[i+j]+=t1[i]*t2[j];       len=check(prod,len);       return inttostr(prod,len);   }   int main()   {       char m1[1000],m2[1000];       while(cin>>m1>>m2)         cout<<multiply(m1,m2)<<endl;       return 0;   }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved