Prolem 1057 a^b - 无幻の编程 - 对于一个初学者来说,野心也是必须的...

Prolem 1057 a^b

无幻 posted @ 2009年7月18日 16:31 in ACM程序 with tags c++ acm a^b , 1522 阅读

对于任意两个正整数a,b(0<=a,b<10000)计算ab各位数字的和的各位数字的和的各位数字的和的各位数字的和。

输入

输入有多组数据,每组只有一行,包含两个正整数a,b。最后一组a=0,b=0表示输入结束,不需要处理。

输出

对于每组输入数据,输出ab各位数字的和的各位数字的和的各位数字的和的各位数字的和。

输入样例

2 3
5 7
0 0

输出样例

8
5

提示:注意a,b的取值范围与最后结果的取值范围。

Original: FZUPC Warmup 2005 

#include <iostream>
using namespace std;

int main()
{
	unsigned int a,b,c=1;
	while(cin>>a>>b)
	{
		if(a!=0 && b!=0)
		{
			for(int i=1;i<=b;i++)
				c=(c*a)%9;
			if(c==0)
				cout<<9<<endl;
			else
				cout<<c<<endl;
			c=1;
		}
		else if(a==0 && b!=0)
		{
			cout<<0<<endl;
		}
		else if(a!=0 && b==0)
		{
			cout<<1<<endl;
		}
		else
			break;
	}
	return 0;
}

以上是正确Accepted的代码。程序的关键是注意先将a模9,就可以找出规律。

以下是我的另一个做法,下面测试可以,上面提交错误,晕倒..... 

#include <iostream>
using namespace std;

int main()
{
	unsigned int a,b,c=1;
	while(cin>>a>>b)
	{
		if(a!=0 && b!=0)
		{
			b=b%4;
			a=a%10;
			if(b==0)
				b=4;
			for(int i=1;i<=b;i++)
				c=c*a;
			cout<<c%10<<endl;
			c=1;
		}
		else if(a==0 && b!=0)
		{
			cout<<0<<endl;
		}
		else if(a!=0 && b==0)
		{
			cout<<1<<endl;
		}
		else
			break;
	}
	return 0;
}




 

 

 

 

 

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee