高精度加法以及乘法运算
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;
}
#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;
}
相关文章推荐
- 高精度运算-(加法减法乘法)
- 整数高精度运算的库(加法,减法,乘法,除法,取模)
- Java之计算机简单的加减乘除运算以及连续的加法,减法,乘法,除法运算
- 7-2 一元多项式的乘法与加法运算
- PTA 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算(20 分)
- 任意长度的高精度大整数和浮点数的加法和乘法
- 5-2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 线性结构CT 02-线性结构1 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- (PHP实现)只使用++运算实现加法,减法,乘法,除法
- 多项式乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- POJ 2845 01000001 二进制加法 套用高精度加法运算代码
- (高精度运算4.7.24)UVA 10013 Super long sums(大数加法——某一位的数字可能大于10)
- (高精度运算4.7.24)UVA 10013 Super long sums(大数加法——某一位的数字可能大于10)
- 数据结构基础 一元多项式的乘法与加法运算
- pta 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)