51Nod 1016 水仙花数 打表

来源:互联网 发布:字符数组结束标志 编辑:程序博客网 时间:2024/06/05 10:58

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153,1634 = 1^4 + 6^4 + 3^4 + 4^4)。
给出一个整数M,求 >= M的最小的水仙花数。
Input
一个整数M(10 <= M <= 10^60)
Output
输出>= M的最小的水仙花数,如果没有符合条件的水仙花数,则输出:No Solution
Sample Input
300
Sample Output
370

#include<bits/stdc++.h>const int INF  = 0x3f3f3f3f;const int Maxn = 500005;#define ll long long#define mem(x,y) memset(x,y,sizeof(x))using namespace std;int main() {    string s[89] = {        "0",        "1",        "2",        "3",        "4",        "5",        "6",        "7",        "8",        "9",        "153",        "370",        "371",        "407",        "1634",        "8208",        "9474",        "54748",        "92727",        "93084",        "548834",        "1741725",        "4210818",        "9800817",        "9926315",        "24678050",        "24678051",        "88593477",        "146511208",        "472335975",        "534494836",        "912985153",        "4679307774",        "32164049650",        "32164049651",        "40028394225",        "42678290603",        "44708635679",        "49388550606",        "82693916578",        "94204591914",        "28116440335967",        "4338281769391370",        "4338281769391371",        "21897142587612075",        "35641594208964132",        "35875699062250035",        "1517841543307505039",        "3289582984443187032",        "4498128791164624869",        "4929273885928088826",        "63105425988599693916",        "128468643043731391252",        "449177399146038697307",        "21887696841122916288858",        "27879694893054074471405",        "27907865009977052567814",        "28361281321319229463398",        "35452590104031691935943",        "174088005938065293023722",        "188451485447897896036875",        "239313664430041569350093",        "1550475334214501539088894",        "1553242162893771850669378",        "3706907995955475988644380",        "3706907995955475988644381",        "4422095118095899619457938",        "121204998563613372405438066",        "121270696006801314328439376",        "128851796696487777842012787",        "174650464499531377631639254",        "177265453171792792366489765",        "14607640612971980372614873089",        "19008174136254279995012734740",        "19008174136254279995012734741",        "23866716435523975980390369295",        "1145037275765491025924292050346",        "1927890457142960697580636236639",        "2309092682616190307509695338915",        "17333509997782249308725103962772",        "186709961001538790100634132976990",        "186709961001538790100634132976991",        "1122763285329372541592822900204593",        "12639369517103790328947807201478392",        "12679937780272278566303885594196922",        "1219167219625434121569735803609966019",        "12815792078366059955099770545296129367",        "115132219018763992565095597973971522400",        "115132219018763992565095597973971522401"    };    string m;    cin >> m;    for (int i = 0; i < 89; i++) {        if (s[i].size() == m.size()) {            if (strcmp(s[i].c_str(), m.c_str()) >= 0) {                cout << s[i] << endl;                return 0;            }        }        if (s[i].size() > m.size()) {            cout << s[i] << endl;            return 0;        }    }    cout<<"No Solution\n";}
原创粉丝点击