求A^B的最后三位数表示的整数

A864830 2011-05-15 11:27:08
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,sum,p;

while(scanf("%d%d",&a,&b)!=EOF){
if(a==0&&b==0)
break;
else{
sum=pow(a,b);
if(sum>=1000)
p=sum%1000;
else
p=sum;
}
printf("%d\n",p);
}
return 0;
}



Description
求A^B的最后三位数表示的整数。
说明:A^B的含义是“A的B次方”
Input
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。
Output
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。
Sample Input
2 3
12 6
6789 10000
0 0
Sample Output
8
984
1



前两个都对 就最后一个输出老是0
...全文
22161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
昵称很不好取 2011-05-15
  • 打赏
  • 举报
回复
要考虑溢出的情况
a^b的时候,如果a和b比较大,结果只需要最后三位,每次只需要保留上一次结果的最后3位即可,而不需要保留a^n次方的整个结果,其中n = 1、2、……、b
x1m2j3-hq 2011-05-15
  • 打赏
  • 举报
回复
测试ok
x1m2j3-hq 2011-05-15
  • 打赏
  • 举报
回复
#include "stdio.h"
void main()
{
int a,b,i,flag,sum;

printf("要输入数据请按1;退出按0\n");
scanf("%d",&flag);
while(flag)
{
sum=1;
a=0;b=0;
printf("\n请输入两个数,之间加空格符,范围在0-10000之间。\n");
scanf("%d %d",&a,&b);
if(a==0&&b==0)
{
printf("\n输入的数位%d和%d。",a,b);
break;
}
else
{
for(i=1;i<=b;i++)
{
sum*=a;
printf("\n%d的%d次方\n",a,i);
if(sum>1000)
{
sum=sum%1000;
printf("%d\n",sum);
}

}
}
printf("\n%d的%d次方最后三位数为:%d\n",a,b,sum);
printf("要输入数据请按1;退出按0\n");
scanf("%d",&flag);
}

}
lwprain 2011-05-15
  • 打赏
  • 举报
回复

还是进行溢出测试吧
try
{
c=a*b;
if((double)a*(double)b>(pow(2,sizeof(int)*8)-1))throw c;
printf("%d\n",a*b);
}
catch(int e)
{
cout<<"数据溢出!"<<endl;
}
一旦溢出,就行溢出操作
lwprain 2011-05-15
  • 打赏
  • 举报
回复
int 类型表示的最大数是有上限的,一般情况下为2^16,如果要表示更大的值,一般可以用unsigned long int,它能表示的上限是2^32,超过上限就要溢出了,是得不到正确的结果的。
LZF349428322 2011-05-15
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,sum,p,flag=0;//加一个标记变量

while(scanf("%d%d",&a,&b)!=EOF){
if(a==0&&b==0)
{flag=1;break;}
else{
sum=pow(a,b);
if(sum>=1000)
p=sum%1000;
else
p=sum;
}
if (flag==1) printf ("0\n");
else
printf("%d\n",p);
}
return 0;
}

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧