大数相加,分别用C++和Java实现
2014-06-26 11:40
281 查看
大家在A题的时候,大数相加是很常见的,都知道用字符串来做,但是实现起来可能有一些困难,接下来我就给大家讲讲我的做法
首先,用C++来做;
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[100],b[100]; //用两个字符串来保存我们要输入的两个大树;
int i,j,k,lenth1,lenth2,lentha,lenthb,c[1000]; //用一个int数组来保留每一位相加后的结果,
cin>>a;
cin>>b;
lentha=lenth1=strlen(a)-1; // strlen()函数是计算这个字符串有多长的,返回值即为长度;
lenthb=lenth2=strlen(b)-1;
if(lenth1<lenth2)
{
k=lenth1; //找出较长的一个字符串
lenth1=lenth2;
lenth2=k;
}
for(i=lenth1,j=lenth2;j>=0;i--,j--)
{
c[i+1]=a[i]-'0'+b[j]-'0'; //因为这儿的字符是ASC码,减去0的ASC码后就是数字本身的大小了,然后保存到一个int数组中
}
if(lentha>lenthb)
{
for(j=i;j>=0;j--)
c[j+1]=a[j]-'0'; // 将较大的数加到数组中
}
else
{
for(j=i;j>=0;j--)
c[j+1]=b[j]-'0';
}
c[0]=0; //这儿c[0]给它赋值为0;是因为两个数相加后,这个数的位数可能比最大的那个数的位数大1,也可能相等,
//所以c[0]是用来存可能要进一位的那个数的;
for(i=lenth1+1;i>=1;i--)
{
if(c[i]>=10) //判断如果这个数大于10,就取它的余数;然后让它的前面一位+1;这儿就是数大于10就进一位
{
c[i]=c[i]%10;
c[i-1]=c[i-1]+1;
}
}
if(c[0]!=0)
cout<<c[0];
for(i=1;i<=lenth1+1;i++) //输出结果
cout<<c[i];
cout<<"\n";
}
接下来用Java做;
import java.math.*; a//java中有自带的大数;
import java.util.*;
public class Main{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
BigInteger a=BigInteger.valueOf(1);
BigInteger b=BigInteger.valueOf(1);
a=cin.nextBigInteger();
b=cin.nextBigInteger();
System.out.println(a.add(b)); //不能写成a+b;
}
}
}
首先,用C++来做;
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[100],b[100]; //用两个字符串来保存我们要输入的两个大树;
int i,j,k,lenth1,lenth2,lentha,lenthb,c[1000]; //用一个int数组来保留每一位相加后的结果,
cin>>a;
cin>>b;
lentha=lenth1=strlen(a)-1; // strlen()函数是计算这个字符串有多长的,返回值即为长度;
lenthb=lenth2=strlen(b)-1;
if(lenth1<lenth2)
{
k=lenth1; //找出较长的一个字符串
lenth1=lenth2;
lenth2=k;
}
for(i=lenth1,j=lenth2;j>=0;i--,j--)
{
c[i+1]=a[i]-'0'+b[j]-'0'; //因为这儿的字符是ASC码,减去0的ASC码后就是数字本身的大小了,然后保存到一个int数组中
}
if(lentha>lenthb)
{
for(j=i;j>=0;j--)
c[j+1]=a[j]-'0'; // 将较大的数加到数组中
}
else
{
for(j=i;j>=0;j--)
c[j+1]=b[j]-'0';
}
c[0]=0; //这儿c[0]给它赋值为0;是因为两个数相加后,这个数的位数可能比最大的那个数的位数大1,也可能相等,
//所以c[0]是用来存可能要进一位的那个数的;
for(i=lenth1+1;i>=1;i--)
{
if(c[i]>=10) //判断如果这个数大于10,就取它的余数;然后让它的前面一位+1;这儿就是数大于10就进一位
{
c[i]=c[i]%10;
c[i-1]=c[i-1]+1;
}
}
if(c[0]!=0)
cout<<c[0];
for(i=1;i<=lenth1+1;i++) //输出结果
cout<<c[i];
cout<<"\n";
}
接下来用Java做;
import java.math.*; a//java中有自带的大数;
import java.util.*;
public class Main{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
BigInteger a=BigInteger.valueOf(1);
BigInteger b=BigInteger.valueOf(1);
a=cin.nextBigInteger();
b=cin.nextBigInteger();
System.out.println(a.add(b)); //不能写成a+b;
}
}
}
相关文章推荐
- C/C++和JAVA 实现大数相加
- java实现两个大数相加,可能出现溢出错误
- 数据结构Java实现——①栈-->栈的应用一、大数相加
- 用字符串模拟两个大数相加——java实现
- C++实现的一个简单两个大数相加程序!
- 用字符串模拟两个大数相加——java实现
- Java实现大数相加、相乘(不使用BigInteger)
- JAVA实现两个大数相加
- java实现两个大数相加
- 面试常见题目:大数相加的Java实现(考虑负数情况)
- 题目1089:数字反转 (分别用C++/Java实现)
- java中用ArrayList类实现正整数大数相加与相乘
- java实现大数相加问题
- java实现大数相加问题
- c++和java的内存管理,分别是怎么实现的,怎么防止内存泄露?
- Java不使用BigDecimal,实现两个大数相加
- 字符串模拟大数相加——Java实现
- 用字符串模拟两个大数相加——java实现
- 大数相加的C++简单实现
- C++实现——大数相加