ZZULIOJ 1090: 整数幂(多实例测试)附解题过程

描述

求A^B的最后三位数表示的整数(1<=A,B<=1000)

输入

第一行输入一个整数n,表示有n个测试实例,接着有n行,每行一个实例,给出两个正整数A,B

输出

针对每个测试实例,输出A^B的最后三位(没有前导0) ,单独占一行。

样例输入 Copy

2
2 3
12 6

样例输出 Copy

8
984
题目如上
下面看我最终答案:

#include<stdio.h>
int p(int x,int y)
{
	int i,num=1;
	for(i=0;i<y;i++)
	{
		num*=x;
		num=num%1000;
	}
	return num;
}
int main()
{
	int x,y,n;
	int date;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&x,&y);
		date=p(x,y);
		printf("%d\n",date);
	}
	return 0;
}

一般出问题就是用了pow()函数 调用了<math.h>

其实和之前那个阶乘的题问题类似

数据溢出的问题

这是我刚开始的思路:

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i;
	scanf("%d",&n);
	for(i=n;i>0;i--)
	{
		int x,y,date;
		scanf("%d%d",&x,&y);
		date=pow(x,y);
		printf("%d\n",date%1000);
	}
	return 0;

}

没想那么多,但我忽略了数据溢出的问题,所以这道题·我们不能用pow()函数,要避免数据溢出的话,就不能算出结果(目前我只能想到这样的方法)但要保证结果正确---------->

	for(i=0;i<y;i++)
	{
		num*=x;
		num=num%1000;
	}

只留后几位就可以

在这里还有几个使用pow()函数需要注意的问题
使用pow()函数需要注意的问题
如果对自己有帮助的话请随手留个赞撒 >-<

发布了22 篇原创文章 · 获赞 17 · 访问量 1143

猜你喜欢

转载自blog.csdn.net/qq_45803800/article/details/104342752