PAT 乙级 1091 N-自守数
1. 题目简述及在线测试位置
1.1 N-自守数示例: 3×922=25392,25392 的末尾两位正好是 92,所以 92 是一个 3-自守数。根据上述定义对输入数字进行判定,本题中N的范围是[1,9]
1.2 在线测试位置: 1091 N-自守数
2. 基本思路
根据题意编码:使用string类型存储待判定的数字,这样可以通过string.length()函数得到数字的位数;对于类似 3×922=25392 的运算结果,取结果后面的 string.length()位数字,随后与待判定数字进行比对
3. 完整AC代码
#include <string>
#include <iostream>
using namespace std;
int GetNumber(int N, int Length);
int main()
{
int M;
string Number; int IntNumber;
cin >> M;
while (M--)
{
cin >> Number;
IntNumber = stoi(Number); //将字符串形式的Number转换为整型
int Sum,Result,i;
for (i = 1; i <= 9; i++)
{
Sum = i * (IntNumber * IntNumber);
Result = GetNumber(Sum, Number.length());
if (Result == IntNumber)
{
cout << i << " " << Sum << endl;
break;
}
}
if (i > 9)
cout << "No" << endl;
}
return 0;
}
int GetNumber(int N, int Length) //取得数字N的后Length位数字
{
int L = Length, Number = N, Sum = 0, Scale = 1;
while (L--)
{
Sum += Number % 10 * Scale;
Number = (Number - Number % 10) / 10;
Scale *= 10;
}
return Sum;
}