2013第四屆藍橋杯 C/C++本科A組 排它平方數(2個數相乘為大數,大數位標記的方法)

來源:互聯網
上載者:User

標籤:

小明正看著 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個數相乘為大數,大數位標記的方法)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.