我正在尝试实现一个简单的程序,它接受基数和指数并输出取幂结果的最后一位数,但在线判断说我的程序给出了错误的答案。可能有什么不对?
P.S。程序的约束必须是700 kb,这不是问题(我可以删除空格和注释,并使用单字母变量来避免这个问题)
#include <iostream>
using namespace std;
int main()
{
int t; // t - number of test cases
cin >> t;
cin.get();
for (int i = 0; i < t; ++i)
{
int base, exp; // base - base, exp - exponent
cin >> base >> exp;
cin.get();
if (exp == 0)
cout << 1 << endl;
else if (base % 10 == 0)
cout << 0 << endl;
else if (base % 10 == 1)
cout << 1 << endl;
else if (base % 10 == 5)
cout << 5 << endl;
else if (base % 10 == 6)
cout << 6 << endl;
else if (base % 10 == 2 || base % 10 == 3 || base % 10 == 7 || base % 10 == 8)
{
int pattern = exp % 4; // pattern repeats every 4th exponent
int lastDigit = base; // lastDigit - result of program
if (pattern == 0)
pattern = 4;
for (int i = 1; i < pattern; ++i)
lastDigit = (lastDigit * base) % 10;
cout << lastDigit << endl;
}
else if (base % 10 == 4 || base % 10 == 9)
{
int pattern = exp % 2; // pattern repeats every 2nd exponent
int lastDigit = base; // lastDigit 0 result of program
if (pattern == 0)
pattern = 2;
for (int i = 1; i < pattern; ++i)
lastDigit = (lastDigit * base) % 10;
cout << lastDigit << endl;
}
}
}
以下是样本。
INPUT
3 10
6 2
7 3123123
0 1
1 0
0 0
OUTPUT
9
6
3
0
1
1
提前致谢。
编辑:
答案 0 :(得分:6)
这是错误的:
int lastDigit = base; // lastDigit - result of program
你应该用10的模数来得到最后一位数。
你确实在10之后执行模数,但并非在所有情况下都执行(当for循环不需要任何迭代时)。因此,在某些情况下,您的代码将输出一个多于一位的数字。
答案 1 :(得分:5)
lastDigit * base
溢出时,此代码失败。