题目链接
http://poj.org/problem?id=3508
题意:
给出一个数字,这个数字的前几位被擦去了,求能否得到一个x,让x*10+x等于这个数字原来的样子
题解:
被擦去的几位只可能是1-10这10个数字,用99,999之类的数举个例子就可以了,然后仔细观察这题发现有个规律:
a b c 0
a b c
———- (a>0)
b c c
a d
因此,能求到x的情况下,最后的x首位必然不能为0,其他位如果减去后一位数字后小于0向前一位借1即可
注意点
输出的char数组要在最后一位输入一个“\0”
AC代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
char num[1000010];
int main()
{
int cnt = 1;
while(scanf("%s", num))
{
//cout << num <<endl;
int len = strlen(num);
char ans[1000010];
//cout << len << endl;
if(strcmp(num, "0") == 0)break;
ans[len-1] = num[len-1];
int sigh = 0;
int number = num[len-1];
for(int i = len - 2; i >= 0; i--)
{
number = num[i] - number + sigh;
if(number < 0)
{
ans[i] = number + 10 + '0';
sigh = -1;
}
else
{
ans[i] = number + '0' ;
sigh = 0;
}
number = ans[i];
}
ans[len] = '\0';
if (ans[0] != '0')
printf("%d. %s\n",cnt++,ans);
else
printf("%d. IMPOSSIBLE\n",cnt++);
}
return 0;
}