问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2024-10-11 14:43

我来回答

2个回答

热心网友 时间:2024-10-11 16:33

两个超大数相加,相乘/*
本程序假设所输入的大数均在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]);
}

热心网友 时间:2024-10-11 16:35

你小学用来计算大数加减乘除,是需要列竖式的,
好好回忆一下,翻翻小学数学课本
把那些数字都用字符串来存储再运算吧

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

代码细节就不说了,这个都自己分析不出来
就真的无语了
这个不需要用到什么生僻技术滴
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
oppoa9私密相册在哪里(oppoa9私密相册在哪里查看) oppoa9私密照片怎么看(oppoa9手机设为私密的照片怎么找) oppoa9怎样找到自己的私密相册 安全阀有什么作用 安全阀是什么 安全阀的作用有哪些 一年级上课时训练40页的答案,有个数图形的机器人,⭕️有几个 一年级机器人有几个圆柱 斗鱼直播怎么投影到电视 直播投屏电视方法详解 斗鱼怎么在电视上看直播电视上看斗鱼直播教程 东芝电视如何安装斗鱼直播 磁项链有什么功效?什么人才可以戴?谢谢了,大神帮忙啊 太核磁手链的功能与效果 磁性手链 有什么 那些功效,除了有助于血液循环之外,还可以抗辐射吗? 制作烟台海胆蒸蛋羹需要提前做什么准备? 怎样制作肉质鲜美的海胆蒸蛋? 路在自己脚下微信积极向上励志晚安微博语录大全分享 今年高考考了324分报什么专科学校好? 2024年湖北物理类324分能考上什么大学? 去年土木考华工研究生考324,落榜了今年还能考985院校吗 我考了324可以考专科吗??? 今年高考考了324分,现在很迷茫 不知道能上什么大专? 2024年辽宁324分能考上什么大学? 我今年考324分,我是复习进入本科还是直接去读专科 职中生考了324分能上211大学吗 "扎马步"说法的由来? 普通人如何扎好马步?扎马步的好处是什么。是清晨扎马步好,还E 盆栽花卉有哪些常见虫害 病虫害种类有哪些 常见林木虫害有哪些 常见南方植物虫害有哪些 明日方舟探讨异格干员的设计介绍_明日方舟探讨异格干员的设计是什么 东营电视台有线电视 垦利民丰湖风景区的垦利民丰湖风景区 - 简介 法院执行案件结案方式主要有哪些? 腾讯微博停止运营qq还能用吗 如何看待用陌生女子试探老公忠诚度? 看小说闺蜜找我试探她老公 用陌生短信勾引试探老公 却引发离婚悲剧 养生茶饮有哪些养生保健很重要 终指是什么意思 保健茶饮保健功能 什么是保健茶 保健茶功效有哪些 电脑中毒 和av终结者有点像 保健饮品有哪些 茶饮料的保健新功效你喝你知道 药茶的具有几种保健功效 LOL中赏金的使用问题。 逻辑表达式化简abc+非a+非b+非c+d 逻辑函数化简(A+B+C)的非 电影魔兽女主身世