Prolem 1057 a^b - 无幻の编程 - 对于一个初学者来说,野心也是必须的...
Prolem 1057 a^b
对于任意两个正整数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; }