跪求c++大数相加和大数相乘的代码,注释要详细的啊 100

 我来答
匿名用户
2012-07-26
展开全部
两个超大数相加,相乘/*
本程序假设所输入的大数均在20位以内,并且输入数字时候假定不出现非法情况
特例:(不存在这样情况123a78ty等)
*/
#include "stdio.h"
#define MAX 21
void InputNumber(int []); //输入大数
void InitNumber(int []); //初始化用于存放结果的数组
void Multi(int [],int [],int []); //进行大数乘法
void singleMulti(int [],int,int []); //对大数乘以一位数的函数
void Add(int [],int []); //对结果进行错位相加
void printresult(int []); //输出结果
void main()
{
int largenumber1[MAX],largenumber2[MAX],mResult[2 * MAX -1];
//largenumber1[]和largenumber2[]表示要相乘的大数
//mResult[]表示结果存放的数组,显然其位数不会超过2 * (MAX - 1)
printf("Input the first number:\n");
InputNumber(largenumber1);
printf("Input the second number:\n");
InputNumber(largenumber2);
InitNumber(mResult);
Multi(largenumber1,largenumber2,mResult);
printf("The result is:\n");
printresult(mResult);
getchar();
}
void InputNumber(int largenumber[])
{
char numberchar;
int i = 0;
scanf("%c",&numberchar);
while(numberchar != '\n' && i < MAX) //最初输入大数用字符串表示
{
largenumber[++i] = numberchar - '0';
scanf("%c",&numberchar);
}
largenumber[0] = i;
}
void InitNumber(int result[])
{
for(int i = 0; i < 2 * MAX - 1; i++)
result[i] = -1;
}
void Multi(int number1[],int number2[],int result[])
{
int i;
int temper[2 * MAX - 1];
for(i = number2[0]; i >= 1; i--)
{
singleMulti(number1,number2[i],temper);
Add(result,temper);
}
}
void singleMulti(int number1[],int number2,int temper[])
{
int i,t = 0,c = 2 * MAX - 2;
for(i = number1[0]; i >= 1; i--)
{
int tempernumber = number2 * number1[i];
temper[c--] = (tempernumber + t) % 10;
t = (int)((tempernumber + t) / 10);
}
if (t > 0)
{
temper[c] = t;
temper[0] = 2 * MAX - 2 - c + 1;
}
else
temper[0] = 2 * MAX -2 - c;
}
void Add(int result[],int temper[])
{
static int pos = 2 * MAX - 2;
int c = pos,t = 0;
for(int i = 2 * MAX - 2; i > 2 * MAX - 2 - temper[0]; i--)
{
if (result[c] == -1)
result[c] = 0;
int tempernumber = result[c] + temper[i];
result[c--] = (tempernumber + t) % 10;
t = (int)(tempernumber / 10);
}
if (t == 1)
result[c] = 1;
pos--;
}
void printresult(int result[])
{
for(int i = 1; i < 2 * MAX - 1 ; i++)
if (result[i] != -1)
printf("%d",result[i]);
}
xuaninv
2012-07-26 · TA获得超过645个赞
知道小有建树答主
回答量:557
采纳率:0%
帮助的人:351万
展开全部
你小学用来计算大数加减乘除,是需要列竖式的,
好好回忆一下,翻翻小学数学课本
把那些数字都用字符串来存储再运算吧

把竖式的加减乘除实现即可,反正也是一位一位的计算

代码细节就不说了,这个都自己分析不出来
就真的无语了
这个不需要用到什么生僻技术滴
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式