【1168】大整数加法

【题目描述】
       求两个不超过200位的非负整数的和。
【输入】
       有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
       一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
       22222222222222222222
       33333333333333333333
【输出样例】
       55555555555555555555
【参考程序】

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

#define SIZE 2001

int main() {
	char a1[SIZE], b1[SIZE];
	int x, lena, lenb, lenc, a[SIZE], b[SIZE], c[SIZE];
	
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b));
	memset(c, 0, sizeof(c));

	gets(a1);
	gets(b1);
	lena = strlen(a1);
	lenb = strlen(b1);
	
	for (int i=0; i<lena; i++) {
		a[lena-i] = a1[i] - 48;				// 将字符串a1转存到整型数组a,且倒序存储 
	}
	for (int i=0; i<lenb; i++) {
		b[lenb-i] = b1[i] - '0';
	}
	
	x = 0;									// 进位x初始化为0 
	lenc = 1;								// 从第一位加起 
	while (lenc<=lena || lenc<=lenb) {		// 判断两个大整数是否都还没有算完 
		c[lenc] = a[lenc] + b[lenc] + x;	// x表示前一次的进位 
		x = c[lenc] / 10;					// 计算进位 
		c[lenc] %= 10;						// 求相加后的数的个位 
		lenc++;								// 计算下一位数 
	}	
	c[lenc] = x;
	while (c[lenc] == 0) {					// 去掉多余的0 
		lenc--;
	} 
	
	for (int i=lenc; i>=1; i--) {
		cout << c[i];
	}  
		
	return 0;
}

密码学分为两类密码:对称密码对称密码。对称密码主要用于数据的加/解密,而对称密码则主要用于认证、数字签名等场合。对称密码在加密解密时,是把加密的数据当作一个大的正整数来处理,这样就涉及到大整数的加、减、乘、除指数运算等,同时,还需要对大整数进行输出。请采用相应的数据结构实现大整数的加、减、乘、除指数运算,以及大整数输入输出。 【基本要】 1.要采用链表来实现大整数的存储运算,允许使用标准模板类的链表类(list)函数。 同时要可以从键盘输入大整数,也可以文件输入大整数大整数可以输出至显示器,也可以输出至文件。大整数的存储、运算显示,可以同时支持二进制十进制,但至少要支持十进制。大整数输出显示时,必须能清楚地表达出整数的数。测试时,各种情况都需要测试,并附上测试截图;要测试例子要比较详尽,各种极限情况也要考虑到,测试的输出信息要详细易懂,表明各个功能的执行正确。 2.要大整数的长度可以受限制,即大整数的十进制受限制,可以为十几的整数,也可以为500的整数,甚至更长;大整数的运算显示时,只需要考虑正的大整数。如果可能的话,请以秒为单显示每次大整数运算的时间。 3.要采用类的设计思路,允许出现类以外的函数定义,但允许友元函数。主函数中只能出现类的成员函数的调用,允许出现对其它函数的调用。 4.要采用多文件方式:.h文件存储类的声明,.cpp文件存储类的实现,主函数main存储在另外一个单独的cpp文件中。如果采用类模板,则类的声明实现都放在.h文件中。 5.强制要采用类模板,也采用可视化窗口;要源程序中有相应注释。 6.要采用Visual C++ 6.0及以上版本进行调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值