描述
求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()函数需要注意的问题
如果对自己有帮助的话请随手留个赞撒 >-<