对于正整数x、y,如果x加上x的各个数字之和得到y,就说x是y的生成元;生成元可能有多个,其中最小的称为最小生成元;生成元也可能不存在,计为0。例如,y = 216,121,2005时的最小生成元分别为198,0,1979。
【输入格式】
共1行,包含多个(数量不限)数y,0 < y < 100,000,遇0输入结束。
【输出格式】
按行输出每个数字的最小生成元,无解时输出0。
【输入样例】 216 121 2005 0 | 【输出样例】 198 0 1979 |
【数据范围】
本题所涉及的数字均不超过int类型的范围
以上是题目。
这题很简单,在第一遍读题的时候我想到用字符串读入,但是还要转换成数字更加麻烦,所以用了不是字符串的读入,就是读入数字。上源码。
#include<iostream>
using namespace std;
int yuan[100000]={0};
int main()
{
const int a=100000;
int sum;
for (int i = 0; i < a; i++)
{
sum+=i;
int m,n;
n=i;
while (n>0)
{
m=n%10;
sum+=m;
n/=10;
}
if(yuan[sum]==0)
{
yuan[sum]=i;
}
sum=0;
}
int j=0;
int putin[100000]={1};
while (putin[j]!=0)
{
j++;
cin>>putin[j];
}
for (int i = 1; i < j; i++)
{
cout<<yuan[putin[i]]<<endl;
}
return 0;
}
while循环部分就是。
继续学习。