標籤:
小明正看著 203879 這個數字發獃。
原來,203879 * 203879 = 41566646641
這有什麼神奇呢?仔細觀察,203879 是個6位元,並且它的每個數位上的數字都是不同的,並且它平方後的所有數位上都不出現組成它自身的數字。
具有這樣特點的6位元還有一個,請你找出它!
再歸納一下篩選要求:
1. 6位正整數
2. 每個數位上的數字不同
3. 其平方數的每個數位不含原數位任何組成數位
答案是一個6位的正整數。
請通過瀏覽器提交答案。
注意:只提交另一6位元,題中已經給出的這個不要提交。
注意:不要書寫其它的內容(比如:說明性的文字)。
思路:i*i時,範圍為12位元,超過了int的範圍,因此要記錄它的位元,有一個思路是類比乘法的運算,用其中的一個數從低位到高位依次乘以另外一個數,具體儲存請看我的ok1函數
AC代碼:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int flag[10];int num[6];bool ok(int n){ int cnt=0; while(n) { if(flag[n%10]) return false; num[cnt++]=n%10; flag[n%10]++; n/=10; } return true;}bool ok1(int n){ int t=0,j; for(int j=0;j<6;j++) { t+=num[j]*n; if(flag[t%10])return false; t/=10; } while(t) { if(flag[t%10]) return false; t/=10; } return true;}int main(){ for(int i=123456;i<=987654;i++) { memset(flag,0,sizeof(flag)); if(!ok(i)) continue; else { if(ok1(i)) { printf("%d\n",i); } } } return 0;}
2013第四屆藍橋杯 C/C++本科A組 排它平方數(2個數相乘為大數,大數位標記的方法)