zcmu--1104: 小胖买切糕*(好像不是快速幂)

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 1517  Solved: 316
[Submit][Status][Web Board]

Description

今天,小胖出门买切糕,大家都知道,切糕是密度是相当的大,所以切糕的质量要用指数来计算。买买提(切糕商)说:买多少,切多少。结果变成切多少,买多少。由于小胖的气场,买买提最终决定,把一块质量为a^b的切糕,分为c块,多余出来质量为d的卖给小胖,求小胖需要买多少切糕。

Input

输入数据有多组,每组占一行,由三个整数a,b,c,当a=0,b=0,c=0时,表示输入结束,该行不做处理。0<a,c<1000   0=<b<1000 

Output

很简单,你只要求出d的值

Sample Input

3 2 3

4 3 3

0 0 0

Sample Output

0

1

【分析】因为是1000,所以肯定会溢出,所以不能用一般方法。但是我套了快速幂的模板,段错误。不知道为什么。。。

RE代码:

#include<iostream>
#include<cstdio>
using namespace std;
int quickPow(int a,int b,int c)
{
	if(b==1)return a;
	if(b%2==0)
	{
		int t=quickPow(a,b/2,c);
		return t*t%c;
	}
	else{
		int t=quickPow(a,b/2,c);
		t=t*t%c;
		t=t*a%c;
		return t;
	}
}
int main()
{
	int a,b,c;
	while(~scanf("%d%d%d",&a,&b,&c))
	{
                if(a==0&&b==0&&c==0)break;
		cout<<quickPow(a,b,c)<<endl;
	}
	return 0;
}

快速幂模板:

/*快速幂模板*/
int quickPow(int a,int b,int n)
{
    if(b==1)return a;
    if(b%2==0)  //偶数
    {
        int t=quickPow(a,b/2,n);
        return t*t%n;
    }
    else{      //奇数
        int t=quickPow(a,b/2,n);
        t=t*t%n;
        t=t*a%n;
        return t;
    }
}

 【AC代码】

然后,用了常规思路,就A了。感觉很奇怪。希望能有大佬解答。

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
 
int main()
{
    int a,b,c,x;
    while(~scanf("%d%d%d",&a,&b,&c))
    {
        if(a==0&&b==0&&c==0)break;
        x=a%c;
        for(int i=1;i<b;i++)
            x=(x*a)%c;
        cout<<x<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38735931/article/details/82532283