UVa 1583 - Digit Generator
2016-02-28 14:51
465 查看
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=4458&mosmsg=Submission+received+with+ID+16918280
For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When M is
the digitsum of N , we call N a generator of M .
For example, the digit-sum of 245 is 256 (= 245 + 2 + 4 + 5). Therefore, 245 is a generator of 256.
Not surprisingly, some numbers do not have any generators and some numbers have more than one generator. For example, the generators of 216 are 198 and 207.
You are to write a program to find the smallest generator of the given integer.
input. Each test case takes one line containing an integer N , 1
![](https://uva.onlinejudge.org/external/15/3355img1.png)
N
![](https://uva.onlinejudge.org/external/15/3355img1.png)
100,
000 .
multiple generators, print the smallest. If N does not have any generators, print 0.
The following shows sample input and output for three test cases.
打表存储,从1到100000的生成元。
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 100000 + 10000;
int a
;
int sum(int n)
{
int res = 0;
while(n)
{
res += n % 10;
n = n/10;
}
return res;
}
void init()
{
memset(a, 0, sizeof(a));
for(int i = 0; i <= 100000; i++)
{
int tmp = i + sum(i);
if(!a[tmp])
{
a[tmp] = i;
}
}
}
int main()
{
int num, n;
scanf("%d", &num);
init();
for(int i = 1; i <= num; i++)
{
scanf("%d", &n);
printf("%d\n", a
);
}
return 0;
}
For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When M is
the digitsum of N , we call N a generator of M .
For example, the digit-sum of 245 is 256 (= 245 + 2 + 4 + 5). Therefore, 245 is a generator of 256.
Not surprisingly, some numbers do not have any generators and some numbers have more than one generator. For example, the generators of 216 are 198 and 207.
You are to write a program to find the smallest generator of the given integer.
Input
Your program is to read from standard input. The input consists of T test cases. The number of test cases Tis given in the first line of theinput. Each test case takes one line containing an integer N , 1
![](https://uva.onlinejudge.org/external/15/3355img1.png)
N
![](https://uva.onlinejudge.org/external/15/3355img1.png)
100,
000 .
Output
Your program is to write to standard output. Print exactly one line for each test case. The line is to contain a generator of N for each test case. If N hasmultiple generators, print the smallest. If N does not have any generators, print 0.
The following shows sample input and output for three test cases.
Sample Input
3 216 121 2005
Sample Output
198 0 1979
打表存储,从1到100000的生成元。
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 100000 + 10000;
int a
;
int sum(int n)
{
int res = 0;
while(n)
{
res += n % 10;
n = n/10;
}
return res;
}
void init()
{
memset(a, 0, sizeof(a));
for(int i = 0; i <= 100000; i++)
{
int tmp = i + sum(i);
if(!a[tmp])
{
a[tmp] = i;
}
}
}
int main()
{
int num, n;
scanf("%d", &num);
init();
for(int i = 1; i <= num; i++)
{
scanf("%d", &n);
printf("%d\n", a
);
}
return 0;
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性