首页 > ACM题库 > HDU-杭电 > HDU 4608- I-number-枚举-[解题报告]HOJ
2015
09-17

HDU 4608- I-number-枚举-[解题报告]HOJ

I-number

问题描述 :

The I-number of x is defined to be an integer y, which satisfied the the conditions below:
1. y>x;
2. the sum of each digit of y(under base 10) is the multiple of 10;
3. among all integers that satisfy the two conditions above, y shouble be the minimum.
Given x, you’re required to calculate the I-number of x.

输入:

An integer T(T≤100) will exist in the first line of input, indicating the number of test cases.
The following T lines describe all the queries, each with a positive integer x. The length of x will not exceed 105.

输出:

An integer T(T≤100) will exist in the first line of input, indicating the number of test cases.
The following T lines describe all the queries, each with a positive integer x. The length of x will not exceed 105.

样例输入:

1
202

样例输出:

208

/*
分析:
    2013multi第一场i题、签到题。
    建议直接完全暴力吧、而且时间给的那么多呢(这建议是对于比赛来说的
啊= =I),否则有一点儿点儿小坑、掉进去就得不偿失了。

    第一次参加多校、多少说点儿什么吧^_^,比赛真的是激情四射呀,和队
友各种讨论、各种yy的,真的很促进配合。比较蛋疼的是,比赛进行到一半、
副院长竟然来挖人了,要挖走我俩队友、去给他做项目?!我类个深深的去,
这都什么事儿啊。。。导致直接不想做题了,还好内什么意志够坚定= =II。。
。还有比较蛋疼的是这个网速的问题、换了两次电脑才成功打开problem,赶
紧看rank、看到i过的人多就赶紧敲这个,1Y,ac后rank第13,看来手速还是
可以滴~。(我说某校舍得给某队俩实验室、都不舍得给几个网速稍微正常点
儿的账号或者干脆直通么= =,峰值网速几十k经常打开百度文库都要老久老久
的。。平时怕我们拖全校网速就算了、难道仅仅暑假这几十天都不行么?不过
话说一二十台只是用来刷题的电脑还真能把全校网速给拖夸了嘛= =?这是个
问题呀。。。而且网速这问题貌似09届的时候那群老不死的就反应过了吧,怎
么到现在还。。不多说了、再说就要被退役了。。。)
    第一次参加multi多多少少有点儿小冲动,啰嗦的多了点儿,总之比赛还
是挺欢乐的,至于结果嘛。。啊哈~。。弱省弱校么。。还是别问啦。。好好
搞acm最后的一段时间了、享受比赛~(刷题就算了、还是比赛有激情呀~)。

                                                            2013-07-23
*/

#include"iostream"
#include"cstdio"
#include"cstring"
using namespace std;
const int N=110000;

int base,len,y[N],dir[N];
char x[N];
void add()
{
	int i;
	base=0;
	for(i=0;i<len;i++)
	{
		y[i]+=dir[i];
		y[i+1]+=y[i]/10;
		y[i]%=10;
		base+=y[i];
	}
	while(y[len])
	{
		base+=y[len];
		len++;
	}
}
int main()
{
	int T;
	int i;
	cin>>T;
	memset(dir,0,sizeof(dir));
	dir[0]=1;
	while(T--)
	{
		scanf("%s",x);
		strrev(x);
		memset(y,0,sizeof(y));
		for(i=0;x[i];i++)	y[i]=x[i]-'0';
		len=i;
		add();
		while(base%10)	add();
		for(i=len-1;i>=0;i--)	printf("%d",y[i]);
		cout<<endl;
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

参考:http://blog.csdn.net/ice_crazy/article/details/9427871