用数组实现的大整数加法,c语言和java语言两种
这里都没有写注释。。。
#include<stdio.h>
#include<string.h>
int len(char *a)
{
int n;
for(int i=0;a[i]!=0;i++)
n=i;
return n;
}
void inverse(char *a)
{
char temp;
int n=len(a);
for(int i=0;i<=len(a)/2;i++)
{
temp=a[n-i];
a[n-i]=a[i];
a[i]=temp;
}
}
void turntoint(char *a)
{
int lena=len(a);
for(int i=0;i<=lena;i++)
{
a[i]-='0';
}
}
void turntochar(char *a,int len)
{
for(int i=0;i<=len;i++)
a[i]+='0';
}
int add(char *a,char *b,char *c,int lena,int lenb)
{
int p=0;
int len;
if(lena<lenb)
{
len=lenb+1;
}
else
{
len=lena+1;
}
for(int i=0;i<=len;i++)
{
c[i]=a[i]+b[i]+p;
p=0;
if(c[i]>9)
{
p=c[i]/10;
c[i]=c[i]%10;
}
}
if(c[len]==0)
return len-1;
else
return len;
}
int main()
{
int n;
scanf("%d\n",&n);
for(int i=1;i<=n;i++)
{
char a[400]={};
char b[400]={};
char c[401]={};
scanf("%s %s",&a,&b);
int lena=len(a);
int lenb=len(b);
inverse(a);
inverse(b);
turntoint(a);
turntoint(b);
int len=add(a,b,c,lena,lenb);
turntochar(c,len);
inverse(c);
printf("%s\n",c);
}
return 0;
}
java
只是细节上的区别
import java.util.*;
import java.io.*;
class Main
{
public static int max(int a,int b)
{
if(a>b) return a;
else return b;
}
public static void print(char[] a)
{
for(char c:a)
{
System.out.print(c);
}
System.out.print('\n');
}
public static void print(int[] a)
{
for(int c:a)
{
System.out.print(c);
}
System.out.print('\n');
}
public static int[] tA(String a,int n)
{
int[] b=new int[n];
for(int i=n-1;i>=0;i--)
{
if(i>=n-a.length())
b[i]=a.charAt(i-n+a.length())-'0';
else
b[i]=0;
}
return b;
}
public static char[] add(int[] a,int[] b,int n)
{
int[] c=new int[n];
int p=0;
int r=0;
for(int i=n-1;i>=0;i--)
{
c[i]=a[i]+b[i]+p;
p=0;
if(i==0&&c[i]>=10)
{
r=1;
}
if(c[i]>=10)
{
p=c[i]/10;
c[i]=c[i]%10;
}
}
char[] d=new char[n+r];
for(int i=r;i<n+r;i++)
d[i]=(char)(c[i-r]+'0');
if(r==1)
d[0]='1';
return d;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int p=sc.nextInt();
for(int i=1;i<=p;i++)
{
String a0=sc.next();
String b0=sc.next();
int n=max(a0.length(),b0.length());
print(add(tA(a0,n),tA(b0,n),n));
}
}
}