大数:首先大数就是超出比 long long int 范围的数值。那么超出范围后应该怎样计算呢。下面就介绍大数的加减法
大数加法
对于初学者来说代码可能会有点长,但是原理很简单的。
AC:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char s1[1001],s2[1001];//首先定义两个字符数组来输入大数。
int a[1001]= {0},b[1001]= {0},c[5000]= {0};//定义三个整形数组来储存数据
int main()
{
int i,j,len,len1,len2;
scanf("%s %s",s1,s2);
len1=strlen(s1);
len2=strlen(s2);
len=len1>len2?len1:len2;//求出两个字符串长度的大值
for(i=len1-1,j=0; i>=0; i--)
{
a[j]=s1[i]-'0';
j++;
}//将字符数转化为整形数后倒序输入整形数组中.方便下面的进位运算
for(i=len2-1,j=0; i>=0; i--)
{
b[j]=s2[i]-'0';
j++;
}
for(i=0; i<=len; i++)
{
c[i]=c[i]+a[i]+b[i];
if(c[i]>9)
{
c[i+1]++;
c[i]=c[i]-10;//
}
}
int flag=0;//设置一个标志用来判断0+0
for(i=len; i>=0; i--)
{
if(c[i]!=0)//去除前缀多余的0
{
flag=1;
for(j=i; j>=0; j--)
printf("%d",c[j]);//将其倒叙输出
break;
}
}
if(flag==0)
printf("0\n");
return 0;
}
大数减法
如果了解过大数加法后大数减法就更简单啦
c++
AC
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=150;
int a[N],b[N],c[N];
void sub(int x[],int y[],int len){
for(int i=0;i<len;i++){
if(x[i]>=y[i]){
c[i]+=(x[i]-y[i]);
}
else
{
c[i]=x[i]+10-y[i];
c[i+1]--;
}
}
int p=N-1;
for(;p>=0;p--){
if(c[p])break;
}
for(p;p>=0;p--){
cout << c[p];
}
}
int main(){
string str1,str2;
cin >> str1 >> str2;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int len1=str1.size();
int len2=str2.size();
int k=0;
for(int i=len1-1;i>=0;i--){
a[k++]=str1[i]-'0';
}
k=0;
for(int i=len2-1;i>=0;i--){
b[k++]=str2[i]-'0';
}
if(len1>len2){
sub(a,b,len1);
}
else if(len1<len2){
cout << "-";
sub(b,a,len2);
}
else if(len1==len2){
for(int i=len1;i>=0;i--){
if(a[i]==b[i])continue;
if(a[i]>b[i]){
sub(a,b,len1);
break;
}
else
{
cout << "-";
sub(b,a,len1);
break;
}
}
}
}
**博主初学者,如有错误还望大佬指出。以后多多学习,目标做个工程 博 **