比赛 20130725暑期B班1测 评测结果 AAAAAAAAAAAAAA
题目名称 残酷的数学老师 最终得分 100
用户昵称 王者自由 运行时间 0.701 s
代码语言 C++ 内存使用 0.38 MiB
提交时间 2012-07-18 11:10:49
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <string>
  4. #include <cmath>
  5. #include <iostream>
  6. #include <algorithm>
  7. using namespace std;
  8. const int N = 15000 + 10;
  9. int n, p;
  10. struct bign{
  11. int len, s[N];
  12. bign() {
  13. memset(s, 0, sizeof(s));
  14. len = 1;
  15. }
  16. bign(int num) {
  17. *this = num;
  18. }
  19. bign(const char* num) {
  20. *this = num;
  21. }
  22. bign operator = (int num) {
  23. char s[N];
  24. sprintf(s, "%d", num);
  25. *this = s;
  26. return *this;
  27. }
  28. bign operator = (const char* num) {
  29. len = strlen(num);
  30. for(int i = 0; i < len; i++) s[i] = num[len-i-1] - '0';
  31. return *this;
  32. }
  33. string str() const {
  34. string res = "";
  35. for(int i = 0; i < len; i++) res = (char)(s[i] + '0') + res;
  36. if(res == "") res = "0";
  37. return res;
  38. }
  39. void clean() {
  40. while(len > 1 && !s[len-1]) len--;
  41. }
  42. bign operator * (const bign& b) {
  43. bign c; c.len = len + b.len;
  44. for(int i = 0; i < len; i++)
  45. for(int j = 0; j < b.len; j++)
  46. c.s[i+j] += s[i] * b.s[j];
  47. for(int i = 0; i < c.len-1; i++){
  48. c.s[i+1] += c.s[i] / 10;
  49. c.s[i] %= 10;
  50. }
  51. c.clean();
  52. return c;
  53. }
  54. };
  55. int main() {
  56. freopen("cruel1.in", "r", stdin);
  57. freopen("cruel1.out", "w", stdout);
  58. scanf("%d %d", &n, &p);
  59. bign A = n;
  60. for(int i=1; i<p; i++)
  61. A = A * n;
  62. string s = A.str();
  63. for(int i=0; i<s.length(); i++) {
  64. printf("%c", s[i]);
  65. if(i && (i+1) % 70 == 0) printf("\n");
  66. } printf("\n");
  67. return 0;
  68. }