題目連結
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;}