2014-10-03 23 views
0

我得到兩個數字。第一個自然數n和第二個n位數。 n的範圍是1<=n<=50000。問題是我怎麼能n * n在大數字與例如49000數字。我正在嘗試在字符串上做,然後我有每個數字的數組,然後呢?寫函數將n * n乘以字符串?我不知道如何開始它。有任何想法嗎?檢查號碼是否自守

編輯 我檢查號碼是否爲automorphic但如何編輯它以使用數字來處理50000數字?

#include <cstdlib> 
#include <iostream> 

using namespace std; 

int main() { 
    unsigned int n, m = 10, a, b; 

    cin >> n; 

    b = m; 
    while (n > b) { 
     b *= m; 
    } 

    a = (n * n) % b; 

    if (a == n) 
     cout << "OK"; 
    else 
     cout << "NO"; 

    return 0; 
} 
+3

爲你的作業寫一些代碼 – 2014-10-03 12:59:00

+0

對於那些不知道的人,[自守數字](http://en.wikipedia.org/wiki/Automorphic_number)是一個數字,它的正方形「結束」數字本身。 – Jarod42 2014-10-03 13:00:40

+0

我寫的程序檢查數字是否是自定義的,但它只適用於例如long int。有沒有可以存儲50000位的任何類型? – user2948474 2014-10-03 13:01:00

回答

0

他們大INT在C++

  • 處理利用圖書館,像boost::xintMatt McCutchen bigintInfInt等多種方式...
  • 做手工所需要的操作(如果他們沒有太多的操作需要,你可以實現),在這種情況下,你只需要乘法模塊是一個10的權力,可以很容易地實現),你可以使用fo例std::vector<unsigned char>來存儲n的數字,並按照學校教導,按位數進行乘法運算,並報告所需的最後一位數。

注:你可以做乘法獲得所需的最後一位數字的只有部分(由照顧你需要多少,對於所需要的位數)。對於5000位數字,完成所有乘法將快速完成。

+0

但是,當我有字符,我怎麼能乘以它? – user2948474 2014-10-03 14:34:40

+0

如果是數字(0-9),則使用它,並在必要時在乘法運算中保留進位並插入開始位置。 – NetVipeC 2014-10-03 15:09:12