- 大数的减法
#include <stdio.h>
#include <string.h>
int x[100]= {0},y[100]= {0},z[100]= {0};
int flag=1;
void sub(int x[],int y[],int p) {
int i,o;
for(i=0; i<p; i++) { //进行相减
if(x[i]>=y[i]) {
z[i]=x[i]-y[i];
} else {
z[i]=x[i]-y[i]+10;
x[i+1]--;
}
}
for(i=p-1; i>=0; i--) { //排除前几位为零的情况
if(z[i]!=0) {
o=i;
break;
}
}
if(flag)
printf("0\n");
else {
for(i=o; i>=0; i--) {
//倒序打出结果
printf("%d",z[i]);
}
printf("\n");
}
}
int main() {
char a[100],b[100];//定义两个字符数组来接收两个大数;
int i,j,m,n,q;
scanf("%s %s",a,b);
m=strlen(a);
n=strlen(b);
j=0;
for(i=m-1; i>=0; i--) { //字符数组转化为倒序int型数组;
x[j]=a[i]-'0';
j++;
}
j=0;
for(i=n-1; i>=0; i--) {
y[j]=b[i]-'0';
j++;
}
if(m>n) { //判断减数与被减数的位数
flag=0;
sub(x,y,m);
} else if(m<n) {
printf("-");
flag=0;
sub(y,x,n);
} else {
for(i=m-1; i>=0; i--) {
if(x[i]!=y[i]) {
if(x[i]>y[i]) {
flag=0;
sub(x,y,m);
break;
} else {
printf("-");
flag=0;
sub(y,x,m);
break;
}
} else continue;
}
}
return 0;
}
大数的乘法
#include<stdio.h>
#include<string.h>
#define MAX 100
char a[MAX],b[MAX];
int aa[10005],len;//aa[]保存相乘后的结果,len来相乘后的保存数据的长度 (正序)
void Multplay(){
int x[MAX+10]={0},y[MAX+10]={0},z[MAX*2+10]={0};
int len1,len2,i,j;
len1=strlen(a);
len2=strlen(b);
for(j=0,i=len1-1;i>=0;i--) //将a[]转换为整形数组 (逆序倒序储存)
x[j++]=a[i]-'0';
for(j=0,i=len2-1;i>=0;i--) //将b[]转换为整形数组 (逆序倒序储存)
y[j++]=b[i]-'0';
for(i=0;i<len1;i++) //将因数各个位上的数字与另一个各个位上的数字相乘
{
for(j=0;j<len2;j++)
z[i+j]=z[i+j]+x[i]*y[j];//先乘起来,后面统一进行进位
}
for(i=0;i<MAX*2;i++) //进行进位
{
if(z[i]>=10)
{
z[i+1]=z[i+1]+z[i]/10;
z[i]=z[i]%10;
}
}
for(i=MAX*2;i>0;i--)
{
if(z[i]==0)
continue;
else
break;
}
len=0;
for(;i>=0;i--)
aa[len++]=z[i];
}
int main()
{
while(~scanf("%s%s",a,b))
{
memset(aa,0,sizeof(aa));
Multplay();
for(int i=0;i<len;i++)
printf("%d",aa[i]);
printf("\n");
}
return 0;
}
大数加法
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
void sum(string a,string b) {
for(int i=a.length()-1,j=b.length()-1; i>=0; i--,j--) {
a[i]=char(a[i]+(j>=0?b[j]-'0':0));
if(a[i]-'0'>=10) {
a[i]=char((a[i]-'0')%10+'0');
if(i)
a[i-1]++;
else
a='1'+a;
}
}
cout<<a<<endl;
}
int main() {
string m,n;
cin>>m>>n;
if(m.length()<n.length()) {
string temp=m;
m=n;
n=temp;
}
sum(m,n);
return 0;
}