#include <bits/stdc++.h> //#define int long long #define ioss ios::sync_with_stdio(0), cin.tie(0) using namespace std; template <class cl> void read(cl &x) { x = 0; int f = 0; char ch; ch = getchar(); while (!isdigit(ch)) { f = f | (ch == '-'), ch = getchar(); } while (isdigit(ch)) { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); } x = f ? -x : x; return; } template <class cl> void put(cl x) { if (x < 0) putchar('-'), x = -x; if (x > 9) put(x / 10); putchar(x % 10 + '0'); return; } int jud=0; int ans[30]; int tt; int t1; int len; char ch[50]; // 这里的一切都是从0开始计数的,这样可以省去取整时的麻烦。 inline void dfs(int pos) { if(jud) return ; if(pos>=len) //pos==len 的时候结束,但是结果为0到pos-1。 { jud=1; for(int i=0;i<=len/2;i++) { cout<<ans[i]; } puts(""); // exit(0); return ; } for(int i=0;i<=9;i++) { tt=0; ans[pos]=i; // else ans[pos]=0;//这里要注意。 for(int j=0;j<=pos;j++) { t1=ans[j]*ans[pos-j]%10; tt=(tt+t1)%10; } if(tt==(int)(ch[pos]-'0')) { dfs(pos+1); } if(jud) return ; } /* if(i>=10) //这样是不对的,会造成找不全。 { exit(0); return ; } */ } signed main() { scanf("%s",ch); len=strlen(ch); if(len%2==0) { puts("-1"); return 0; } int j=len-1; int cnt=0; while(ch[j]=='0') { j--; cnt++; } if(cnt%2==1) { puts("-1"); return 0; } dfs(0); if(jud==0) { puts("-1"); return 0; } return 0; } 这个测评有问题。输入146 输出12 是错误的 但是这个代码通过测试了。
全部评论
(0) 回帖