013 任意次方后的最后三位

核心算法:
将问题进行拆分

  1. 求一个数的任意次方:x^y

在C语言规定的运算符中,^为按位异或运算符,而没有特定表示幂指的运算符,所以我们要求x ^y,只能通过以下方式:
①利用循环结构,将幂指运算转化为乘法运算
for(i=1;i<=y;i++) z=z*x; 【unsigned int x,unsigned int y】
②调用数学函数,头文件为<math.h>

乘幂函数:double pow(double x,double y)

以e为底的指数函数:double exp(double y)

  1. 求一个数的后三位:取余
    如果前者为较小的数,后者为较大的数,那么结果直接为较小的数。
    详见C语言取余

①利用取模运算符:z%1000
【只有两个整型数据之间才可以进行模运算,int z,但后者不能为0,参与模运算的两个数可正可负,余数的符号与前者的符号相同】
②调用取余函数:double fmod(doube x,double y)
【可以对浮点型数据进行取模运算,后者可以为0,此时函数返回值为NAN,两个数据可正可负,浮点余数的符号与前者x的符号相同】

注意:

题中要求一个数的任意次方,首先要考虑计算结果是否越界,如何避免越界问题同时又不使结果产生误差,这里在求次方时每乘一次都取其后三位的值,这样就不会出现越界问题,又可完成题目要求。

例:编程求一个整数任意次方后的最后三位数,即求x^y的最后三位数,x和y的值由键盘输入。

#include<stdio.h>
int main()
{
	int i,x,y,z=1;
	printf("请输入两个数,x和y(x^y):\n");
	scanf("%d%d",&x,&y);
	for(i=1;i<=y;i++)/*计算一个数任意次方的后三位*/
		z=z*x%1000;/*直接求后三位数值的任意次方即可*/
	if(z>=100)/*如果有三位数*/
		printf("%d^%d的最后三位是:%d\n",x,y,z);
	else if(z>=10)/*如果只有两位数*/
		printf("%d^%d的最后三位是:0%d\n",x,y,z);
	else /*如果只有一位数*/
		printf("%d^%d的最后三位是:00%d\n",x,y,z");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值