c语言大数求和_指数幂的加法

c语言大数求和_指数幂的加法文章目录1.大数加法2.大数幂运算3.大数求余废话不多说,直接上代码了。1.大数加法stringgetCountAdd(stringa,stringb){ stringc=””; intbit=-1;//判断是否进位-1为否,其他为进位数 inti=a.length()-1;//获得a字符串长度 intj=b.length()-1;//获得b字符串长度 //第一种情况两者都处理完 while(i!=-1&&j!

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


废话不多说,直接上代码了。

1. 大数加法

string getCountAdd(string a, string b)
{ 
   
	string c = "";
	int bit = -1; //判断是否进位 -1为否,其他为进位数
	int i = a.length()-1; //获得a字符串长度
	int j = b.length()-1; //获得b字符串长度
	//第一种情况 两者都处理完
	while (i != -1 && j != -1)
	{ 
   
		int t1 = a[i] - 48; 
		int t2 = b[j] - 48;
		//不存在进位
		if (bit == -1)
		{ 
   
			if (t1 + t2 >= 10)
			{ 
   
				int d = (t1 + t2) % 10;
				c.insert(0, 1, d + 48);
				bit = (t1 + t2) / 10;
			}
			else
			{ 
   
				c.insert(0, 1, t1 + t2 + 48);
			}
		}
		//存在进位
		else
		{ 
   
			if (t1 + t2 + bit >= 10)
			{ 
   
				int d = (t1 + t2 + bit) % 10;
				c.insert(0, 1, d + 48);
				bit = (t1 + t2 + bit) / 10;
			}
			else
			{ 
   
				c.insert(0, 1, t1 + t2 + bit + 48);
				bit = -1;
			}
		}
		i--;
		j--;
	}
	//第二种情况 前者处理完
	while (i == -1 && j != -1)
	{ 
   
		int t2 = b[j] - 48;
		if (bit == -1)
		{ 
   
			c.insert(0, 1, b[j]);
		}
		else
		{ 
   
			if (t2 + bit >= 10)
			{ 
   
				int d = (t2 + bit) % 10;
				c.insert(0, 1, d + 48);
				bit = (t2 + bit) / 10;
			}
			else
			{ 
   
				c.insert(0, 1, t2 + bit + 48);
				bit = - 1;
			}
		}
		j--;
	}
	//第三种情况 后者处理完
	while (i != -1 && j == -1)
	{ 
   
		int t1 = a[i] - 48;
		if (bit == -1)
		{ 
   
			c.insert(0, 1, a[i]);
		}
		else
		{ 
   
			if (t1 + bit >= 10)
			{ 
   
				int d = (t1 + bit) % 10;
				c.insert(0, 1, d + 48);
				bit = (t1 + bit) / 10;
			}
			else
			{ 
   
				c.insert(0, 1, t1 + bit + 48);
				bit = -1;
			}
		}
		i--;
	}
	//最后再判断是否存在进位
	if (bit != -1)
	{ 
   
		c.insert(0, 1, bit + 48);
	}
	bit = -1;
	return c;
}

在这里插入图片描述


2. 大数幂运算

string getCountExp(int a, int b)
{ 
   
	string a1 = to_string(a);
	int i = a1.length()-1;//a的最后下角标
	//m位数*n位数长度不会超过m+n位
	string temp = a1; //temp一直变化
	string temp_2 = "0";
	int bitcount = 0; //判断当前位数
	int bit = -1;//判断是否存在进位
	string * arr = new string[a1.length()];//保存每次计算的数
	int arr_i = 0;
	for (int x = 1; x < b; x++)//几次方就循环几次
	{ 
   
		while (i != -1)//乘数的位数
		{ 
   
			//temp * a1
			int t1 = a1[i] - 48;
			int j = temp.length() - 1;//temp的最后下角标
			for (int z = 0; z < bitcount; z++)
			{ 
   
				arr[arr_i].insert(0, 1, '0');
			}
			while (j != -1)//temp的位数
			{ 
   
				int t2 = temp[j] - 48;
				if (bit == -1)//判断是否有进位
				{ 
   
					if (t1*t2 >= 10)
					{ 
   
						int d = (t1*t2) % 10;
						arr[arr_i].insert(0, 1, d + 48);
						int d_2 = (t1*t2) / 10;
						bit = d_2;
					}
					else
					{ 
    
						int d = t1*t2;
						arr[arr_i].insert(0, 1, d + 48);
					}
				}
				else
				{ 
   
					if ((t1*t2)+bit >= 10)
					{ 
   
						int d = ((t1*t2) + bit) % 10;
						arr[arr_i].insert(0, 1, d + 48);
						int d_2 = ((t1*t2) + bit) / 10;
						bit = d_2;
					}
					else
					{ 
   
						int d = (t1*t2) + bit;
						arr[arr_i].insert(0, 1, d + 48);
						bit = -1;
					}
				}
				j--;
			}
			if (bit != -1)
			{ 
   
				arr[arr_i].insert(0, 1, bit + 48);
				bit = -1;
			}
			//走完一圈
			//计算每一位的数,最后相加
			//temp_2=temp_2+arr[arr_i];
			temp_2 = getCountAdd(temp_2, arr[arr_i]);
			bitcount++;
			arr_i++;
			i--;
		}
		bitcount = 0;
		temp = temp_2;
		temp_2 = "0";
		//temp_2 = "0";
		for (int z = 0; z < arr_i; z++)
		{ 
   
			arr[z] = "";
		}
		arr_i = 0;
		i = a1.length() - 1;//a的最后下角标
	}
	return temp;
}

在这里插入图片描述


3.大数求余

int getCountMod(string a, int b)
{ 
   
	int bit = -1; //判断是否需要进位
	//例如4255%5
	int i = 0;
	while (i < a.length())
	{ 
   
		int t1 = a[i] - 48;
		if (bit == -1)
		{ 
   
			if (t1%b > 0)
			{ 
   
				bit = t1%b;
			}
		}
		else
		{ 
   
			if (((bit * 10) + t1) % b>=0)
			{ 
   
				bit = ((bit * 10) + t1) % b;
			}
		}
		i++;
	}
	if (bit != -1)
	{ 
   
		return bit;
	}
	else
	{ 
   
		return 0;
	}
	return 0;
}

在这里插入图片描述


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185121.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法「建议收藏」

    android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法「建议收藏」AndroidStudio运行按钮灰色的完美解决方法今天新建项目的时候突然发现编译后运行按钮为灰色。解决方案:第一步:点击图中的AddConfiguration,出来如下界面第二步:点+号,并选择AndroidApp选项出来下图所示界面第三步:在Module中下拉框中选择app如果在Module下拉框没有app这个选项点击搜索框,输入sync,从搜索结果中选择如下项:点击运行…

  • 十进制小数转化为二进制的方法是_二进制怎么算

    十进制小数转化为二进制的方法是_二进制怎么算》》十进制整数转化为二进制:举例:10 商 余 10/2 5 0 5/2 2 1 2/2 1 0 1/2 0 1 所以10转化为二进制就是“1010”,从下到上,过多的就不说了,整数转化为二进制还是很简单的,只要遇到商为0即可结束。那么,十进制整数转化为二进制的算法会不…

  • 4个问题带你了解用户画像

    4个问题带你了解用户画像你是否在工作中遇到过以下场景:公司新产品上线,团队一起讨论新产品的用户是谁?优先开拓哪些用户?产品优化时候考虑,目前功能是否满足用户需求?产品页面是用户喜欢的风格吗?投放广告时需要…

  • HDMI接口定义,传输流程

    HDMI接口定义,传输流程全文摘自:https://www.cnblogs.com/TaigaCon/p/3840653.htmlHDMI,全称为(HighDefinitionMultimediaInterface)高清多媒体接口,主要用于传输高清音视频信号。 HDMI引脚…

  • 主流的java编译器_程序猿专用十大在线编译器(IDE)整理

    主流的java编译器_程序猿专用十大在线编译器(IDE)整理1.CodeSandbox(基于React的在线代码沙盒平台)我常用的①主流的脚手架都支持,比如在线create-react-app,vue-cli等(在线fork修改),支持github登录(项目导入),也支持cli上传例子,例子可以在线访问和下载,当然也支持内嵌到其他博客等网页中。③图示支持的脚手架(图1-1)2.CodePen(前端代码编辑运行的网站)①C…

  • Windows 定时执行脚本[通俗易懂]

    Windows 定时执行脚本[通俗易懂]Windows定时执行脚本1、参考资料windows设置定时执行脚本2、解决办法由于Windows系统,无法使用Linux下强大的crontab命令,所以该定时任务也是针对Windo系统的具体操作步骤右击【我的电脑】,选择【管理】在【任务计划程序】面板中点击【创建基本任务】输入任务的【名称】和【描述】当然是希望每天自动执行防疫打卡啦~设置每天执行任务的时间,以及每隔几天执行一次该任务选择【启动程序】选择启动程序的startup.bat

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号