UVa 748 - Exponentiation

本文介绍了一种用于计算大整数幂运算的方法,包括去除小数点后的多余0、转换为整数进行乘法计算,以及计算并输出小数点后的位数。通过逐步分析和代码实现,详细解释了每一步骤的功能和实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:计算大整数的幂运算。

分析:模拟。先将小数化成整数,按大整数计算n-1次乘法;然后计算小数点后的位数控制输出格式。

            计算过程:1.去除小数点后面的后导0;2.转化成整数;3.用乘法计算幂;4.计算小数位数输出。

说明:注意后面多余的0要去掉。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>

using namespace std;

char a[200],b[200],c[200],d[200];

void deal( char* d, char* a )
{
	strcpy( d, a );
	int komm = -1;
	for ( int i = 0 ; d[i] ; ++ i )
		if ( d[i] == '.' ) {
			komm = i;
			break;
		}
	if ( komm == -1 ) return;

	int len = strlen(d)-1;
	while ( len > komm && d[len] == '0' ) {
		d[len] = a[len] = 0;
		len --;
	}
	
	for ( int i = komm ; d[i] ; ++ i )
		d[i] = d[i+1];
}

void mul( char* d, char* a, char* b )
{
	int a_buf[200],b_buf[200],c_buf[200];
	memset( a_buf, 0, sizeof( a_buf ) );
	memset( b_buf, 0, sizeof( b_buf ) );
	memset( c_buf, 0, sizeof( c_buf ) );
	int l_a = strlen(a),l_b = strlen(b);
	int len = l_a+l_b+1;
	for ( int i = 0 ; i < l_a ; ++ i )
		a_buf[i] = a[l_a-1-i]-'0';
	for ( int i = 0 ; i < l_b ; ++ i )
		b_buf[i] = b[l_b-1-i]-'0';
	for ( int i = 0 ; i < l_a ; ++ i ) 
	for ( int j = 0 ; j < l_b ; ++ j )
		c_buf[i+j] += a_buf[i] * b_buf[j];
	for ( int i = 0 ; i < len ; ++ i )
		if ( c_buf[i] > 9 ) {
			c_buf[i+1] += c_buf[i]/10;
			c_buf[i] %= 10;
		}
	
	while ( len > 0 && !c_buf[len] ) -- len;
	for ( int i = 0 ; i <= len ; ++ i )
		d[i] = c_buf[len-i]+'0';
	d[len+1] = 0;
}

void output( char *a, int n , char *c )
{
	//计算小数点位置 
	int komm = 0,len = strlen(c);
	for ( int i = 0 ; a[i] ; ++ i )
		if ( a[i] == '.' ) {
			komm = strlen(a)-1-i;
			break;
		}
	komm *= n;
	if ( len < komm ) {
		printf(".");
		for ( int i = 0 ; i < komm-len ; ++ i )
			printf("0");
		printf("%s\n",c);
	}else {
		for ( int i = 0 ; i < len-komm ; ++ i )
			printf("%c",c[i]);
		if ( c[len-komm] )
			printf(".%s\n",&c[len-komm]);
		else printf("\n");	
	}
}

int main()
{
	int n;
	while ( ~scanf("%s%d",a,&n) ) {
		deal( d, a );
		strcpy( c, d );
		for ( int i = 1 ; i < n ; ++ i ) {
			strcpy( b, c );
			mul( c, b, d );
		}
		output( a, n, c );
	}
	return 0;
}

内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值