c++ 两个100位数相加

请编写一个函数,要求计算并输出两个已给定100位数(存储于两个有着一百个元素的数组中)的加法,请尽量使用初级知识,考试要用的

第1个回答  2009-04-28
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
int a[100];
int b[100];
int sum[101];
int flag=0;
int k = 100;
for(int i = 0;i<100;i++)
{
a[i] = i%9+1;
b[i] = i%9+1;
}
for(int j=99;j>=0;j--)
{
sum[k] = a[j]+b[j]+flag;
if(sum[k]>9)
{
sum[k] = sum[k]%10;
flag = 1;//进位标志
}
else
flag = 0;
k--;
}

return 0;
}
编译环境:VS2005,看看行不。。那个赋值只是试验一下。。本回答被提问者和网友采纳
第2个回答  2009-04-28
大数模板或者说是高精度计算的:
思路:
1) 用字符型或整型数组来存放大整数

an[0]存放个位数,an[1]存放十位数,an[2]存放百位数……

2)模拟小学生列竖式做加法,从个位开始逐位相加,超过或达到10则进位。

用unsigned an1[201]保存第一个数,用unsigned an2[200]表示第二个数,然后逐位相加,相加的结果直接存放在an1中。要注意处理进位。

#include <stdio.h>
#include <string.h>
#define MAX_LEN 201
int an1[MAX_LEN+10];
int an2[MAX_LEN+10];
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int Add(int nMaxLen , int * an1, int * an2)
//将长度最多为nMaxLen 的大整数an1和an2 相加,结果放在an1,
//an1[0],an2[0]对应于个位
{
int nHighestPos = 0;
for(int i = 0;i < nMaxLen; i ++ ) {
an1[i] += an2[i]; //逐位相加
if( an1[i] >= 10 ) { //看是否要进位
an1[i] -= 10;
an1[i+1] ++; //进位
}
if( an1[i] )
nHighestPos = i; //记录最高位的位置
}
return nHighestPos;
}

int main() {
scanf("%s", szLine1); scanf("%s", szLine2);
int i, j;
//库函数memset将地址an1开始的sizeof(an1)字节内容置成0
//sizeof(an1)的值就是an1的长度
//memset函数在string.h中声明
memset( an1, 0, sizeof(an1));
memset( an2, 0, sizeof(an2));
//下面将szLine1中存储的字符串形式的整数转换到an1中去,
//an1[0]对应于个位
int nLen1 = strlen( szLine1);
for(j =0, i = nLen1 - 1;i >= 0 ; i --)
an1[j++] = szLine1[i] - '0';
int nLen2 = strlen(szLine2);
for(j=0, i = nLen2 - 1;i >= 0 ; i --)
an2[j++] = szLine2[i] - '0';
int nHighestPos = Add(MAX_LEN,an1,an2);
for( i = nHighestPos; i >= 0; i -- ) printf("%d", an1[i]);
return 0;
}

//课件上的,直接复制过来··
第3个回答  2009-04-28
巨型数字必须要用一个类来描述,一个函数是很难实现的。这个类的代码在这里:http://read.pudn.com/downloads102/sourcecode/math/417225/HugeInt.cpp__.htm
不过很遗憾的是,这不是初级知识所能解决的。
但是既然要有加法,用类的运算符重载几乎是必须的。
第4个回答  2009-04-28
上面给出的程序当中,都没有考虑两个100位数是否可以为负数,如果允许一个负数和正数相加,还得考虑减法才行。
相似回答