大數處理

來源:互聯網
上載者:User

大數的處理這裡均採用類比的方法。

1.大數相加

c[i]=a[i]+b[i];

c[i+1]=c[i]/10+c[i+1];

c[i]=c[i]%10;

******************************************

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char str1[510],str2[510];
int  a[510],b[510],c[510];
int Add(char str1[],char str2[]);
int main()
{
int test;
cin>>test;
while(test--)
{
memset(str1,0,510);
memset(str2,0,510);
memset(a,0,510);
memset(b,0,510);
memset(c,0,510);
cin>>str1>>str2;
int max=Add(str1,str2);
for(int i=max;i>=0;--i)
cout<<c[i];
cout<<endl;
}
system("pause");
return 0;
}
int Add(char str1[],char str2[])
{
int count=0;
int m=strlen(str1);
int n=strlen(str2);
int max=m>n?m:n;
int i,j,k;
for(i=0;i<m;++i) a[m-i-1]=str1[i]-48;       //轉換為int型
for(j=0;j<n;++j) b[n-j-1]=str2[j]-48;
for(k=0;k<max;++k) c[k]=a[k]+b[k];
for(i=0;i<max;++i)
{
c[i+1]=c[i]/10+c[i+1];
c[i]=c[i]%10;
}
if(c[max]==0) count=max-1;
else
count=max;

2.減法

直接相減,如果為負,則向前借一位.

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char str1[1000],str2[1000];
int a[1000],b[1000],c[1000];
void Subtraction(char str1[],char str2[])      //a>b 
{
int m=strlen(str1);
int n=strlen(str2);
int max=m>n?m:n;
int i,j;
for(i=0;i<m;++i) a[m-i-1]=str1[i]-48;
for(j=0;j<n;++j) b[n-j-1]=str2[j]-48;
for(i=0;i<max;++i)
{
a[i]=a[i]-b[i];
if(a[i]<0)
{
a[i]+=10;
a[i+1]--;
}
}
if(a[max-1]==0)
max=max-2;
else
max=max-1;
for(j=max;j>=0;j--)
cout<<a[j];
cout<<endl;
}
int main()
{
cin>>str1>>str2;
Subtraction(str1,str2);
system("pause");
return 0;
}

3.乘法

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1010],b[1010],c[1010];
char str1[510],str2[510];
void Multiplication(char str1[],char str2[]);
int main()
{
while(cin>>str1>>str2)
{
Multiplication(str1,str2);
}
system("pause");
return 0;
}
void Multiplication(char str1[],char str2[])
{
memset(c,0,sizeof(c));
char temp[510];
if(strlen(str1)<strlen(str2))
{
strcpy(temp,str1);
strcpy(str1,str2);
strcpy(str2,temp);
     }
     int m=strlen(str1);
     int n=strlen(str2);
     int i,j;
     for(i=0;i<m;++i) a[m-i-1]=str1[i]-48;
     for(j=0;j<n;++j) b[n-j-1]=str2[j]-48;
     for(i=0;i<n;++i)
     for(j=0;j<m;++j)
     c[i+j]=b[i]*a[j]+c[i+j];
     int max=2*m;
     for(i=0;i<max;++i)
     {
c[i+1]=c[i]/10+c[i+1];
c[i]=c[i]%10;
}
while(c[max]==0)
{
max--;
}
if(max<0) cout<<0<<endl;
else
for(max;max>=0;--max)
cout<<c[max];
cout<<endl;

4.除法

#include<iostream>
#include<cstring>
using namespace std;
int len1,len2;
char s1[905];
char s2[905];
int re[905];
void sub()
{
int i=0;
int j;
while(1)
{
if(s1[i]=='0')
i++;
else
{
j=i;
break;
}
}
for(;i<len2;i++)
{
s1[i]=s1[i]-s2[i]+'0';
}
for(i=len2-1;i>j;i--)
{
if(s1[i]<'0')
{
s1[i]+=10;
s1[i-1]--;
}
}
}
int main()
{
int i,p;
while(cin>>s1>>s2)
{
len1=strlen(s1);
len2=strlen(s2);
if(len1<len2||len1==len2&&strncmp(s1,s2,len2)<0)
{
cout<<0<<endl;
continue;
}
p=0;
while(1)
{
re[p]=0;
while(strncmp(s1,s2,len2)>=0)
{
sub();
re[p]++;
}
p++;
if(len1==len2) break;
for(i=len2-1;i>=0;i--)
{
s2[i+1]=s2[i];
}
s2[0]='0';
len2++;
s2[len2]='\0';
}
i=0;
while(1)
{
if(re[i]==0)
i++;
else
break;
}
for(;i<p;i++)
cout<<re[i];
cout<<endl;
}
return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.