当涉及到幂,数较大时,要根据题意在每一步循环中将不断增大的幂减小
如1082:求小数的某一位
【题目描述】
分数abab化为小数后,小数点后第nn位的数字是多少?
【输入】
三个正整数a,b,na,b,n,相邻两个数之间用单个空格隔开。0<a<b<100,1<=n<=100000<a<b<100,1<=n<=10000。
【输出】
一个数字。
【输入样例】
1 2 1
【输出样例】
5
代码:
#include<iostream>
using namespace std;
int main()
{
int a,b,n;
int temp;
int i;
cin>>a>>b>>n;
for(i=1; i<=n; i++)
{
a*=10;
temp=a/b;//temp模拟存储第i为小数
a%=b;
}
cout<<temp<<endl;
return 0;
}
如1084:幂的末尾
【题目描述】
幂abab的末33位数是多少?
【输入】
两个正整数a,ba,b。1≤a≤100,1≤b≤100001≤a≤100,1≤b≤10000。
【输出】
从高位到低位输出幂的末三位数字,中间无分隔符。若幂本身不足三位,在前面补零。
【输入样例】
7 2011
【输出样例】
743
代码:
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int main()
{
int a, b;
cin>>a>>b;
int s=1;
for(int i=1;i<=b;i++)
{
s*=a;
s%=1000;//因为要保存三位数,所以可以一直只保存三位数,保证s的值不会过大超出范围
}
if(s>=100)
cout<<s;
else
{
if(s>=10) cout<<"0"<<s;
else cout<<"00"<<s;
}
return 0;
}