您的位置:首页 > 其它

高精度加法以及乘法运算

2014-03-25 16:01 274 查看
#include<iostream>

#include<cstring>

using namespace std;

int big_math[1000];

int char_int(char *s,int *t){
int count=strlen(s);
char *p=s+count-1;
for(int i=0;i<count;i++,p--){
t[i]=(int)(*p-'0'); 
}
return count;

}

void int_char(int *t,char *s,int n){
int i;
int *p=t+n-1;
for(i=0;i<n;i++,p--)
s[i]=(char)(*p+'0');
s[i]='\0';

}

void add(char *a,char *b,char *ans){
int alengh=strlen(a);
int blengh=strlen(b);
int a_m[100];
int b_m[100];
int c[100];
memset(c,0,sizeof(c));
char_int(a,a_m);
char_int(b,b_m);

    int n=alengh>blengh?blengh:alengh;
int i;
for(i=0;i<n;i++)
{
c[i]+=a_m[i]+b_m[i];
if(c[i]>9){
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
if(alengh>=n){
for(;i<alengh;i++){
c[i]+=a_m[i];
if(c[i]>9){
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
}
if(blengh>=n){
for(;i<blengh;i++){
c[i]+=b_m[i];
if(c[i]>9){
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
}
int length;
if(c[i]){
length=(i+1);
}
else
{

    length=i;
}
//int_char(c,c,)
/*
for(int j=0;j<length;j++){
cout<<c[j];
}
cout<<endl;
*/
int_char(c,ans,length);

}

void mutiply(char *a,char *b,char *ans){
int a_len=strlen(a);
int b_len=strlen(b);

     int a_m[100];
int b_m[100];
int c_m[100];
char_int(a,a_m);
char_int(b,b_m);
memset(c_m,0,sizeof(c_m));

int i,j;
for( i=0;i<a_len;i++){
for( j=0;j<b_len;j++)
c_m[i+j]+=a_m[i]*b_m[j];
}
int k;
for( k=0;k<(a_len+b_len-1);k++){
//这里这个小于特别重要
if(c_m[k]>9){
c_m[k+1]+=c_m[k]/10;
c_m[k]=c_m[k]%10;
}
}
int lengh;
if(c_m[k]>0)
lengh=k+1;
else
lengh=k;

int_char(c_m,ans,lengh);

}

int main(){
char test[80];
char test2[80];
int math[80];
while(cin>>test>>test2){
//add()
char ans[80];
char muply[80];
add(test,test2,ans);
cout<<ans<<endl;
cout<<"**"<<endl;
mutiply(test,test2,muply);
cout<<muply<<endl;
/*int n=char_int(test,math);
for(int i=0;i<n;i++){
cout<<math[i];
}
cout<<endl;
*/

}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: