藍橋杯 21位花數

2021-09-02 23:21:26 字數 2377 閱讀 7968

乙個21位的數,每一位的21次方之和,等於該數本身,

求所有這樣的21位數

類似整數劃分,0-9這10個數,分21位數,

所有可能是c(30,9)=14307150個

驗證和是否在1e20-(1e21-1)之間,

然後再判斷和與列舉的個數是否相等。

自己寫了一發大數

o(n²)的乘法

256s才跑出來gg

最後答案只有兩個

128468643043731391252

449177399146038697307

將21位分成三段,用陣列維護,就會省不少時間

具體寫法回頭再補,眼下能做就是了qaq

粘一發自己的大數辣雞**好了

#include #include #include #include #include #include #include #include #include #include #include #include const int inf=0x3f3f3f3f;

const int mod=1e9+7;

const double eps=1e-7;

typedef long long ll;

#define vi vector#define si set#define pii pair#define pi acos(-1.0)

#define pb push_back

#define mp make_pair

#define lowbit(x) (x&(-x))

#define sci(x) scanf("%d",&(x))

#define scll(x) scanf("%lld",&(x))

#define sclf(x) scanf("%lf",&(x))

#define pri(x) printf("%d",(x))

#define rep(i,j,k) for(int i=j;i<=k;++i)

#define per(i,j,k) for(int i=j;i>=k;--i)

#define mem(a,b) memset(a,b,sizeof(a))

using namespace std;

const int maxn=2500;

struct bigint

void init(int x)

while(x);

}void init(const char s)//重點 123 4567

} int compare(const bigint &b)//位多的大

bigint operator +(const bigint &b)const

bigint operator -(const bigint &b)const//確保被減數大 差為正

bigint operator *(const bigint &b)const

bigint operator /(const int &n)const//被確保被除數大 商為正

while(ans.a[ans.len-1]==0&&ans.len>1)ans.len--;

return ans;

}ll operator %(const int &n)const

return ans;

}void cal()

}void output()

};char s[maxn];

ll t[11],cnt;

int step[10];

bigint tmp[10];

bigint low,high,ten,one,a[11],b[11],cal,ans[maxn];

void dfs(int pos,int num)

if(!(cal.compare(low)>=0&&cal.compare(high)<=0))return;

cal.cal();

for(int i=0;i<10;++i)

ans[cnt++]=cal;

return;

} if(pos<=7&&!num)return;

if(pos==9)

else

}}int main()

for(int i=1;i<21;++i)low=low*ten;

high=low;high=high*ten;high=high-one;

low.output(),high.output();

for(int j=0;j<=9;++j)

dfs(0,21);//當前位置,還剩多少個數字

for(int i=0;ians[i].output();

return 0;

}

藍橋杯 5位黑洞數

任意乙個5位數,比如 34256,把它的各位數字打亂,重新排列,可以得到乙個最大的數 65432,乙個最小的數23456。求這兩個數字的差,得 41976,把這個數字再次重複上述過程 如果不足5位,則前邊補0 如此往復,數字會落入某個迴圈圈 稱為數字黑洞 比如,剛才的數字會落入 82962,7593...

藍橋杯決賽 神奇6位數

有乙個6位的正整數,它有個很神奇的性質 分別用2 3 4 5 6去乘它,得到的仍然是6位數,並且乘積中所包含的數字與這個6位數完全一樣!只不過是它們的順序重新排列了而已。請計算出這個6位數。這是乙個整數,請通過瀏覽器提交答案,不要填寫任何多餘的內容 比如說明性的文字 include includeu...

藍橋杯 花朵數

乙個n位的十進位制正整數,如果它的每個位上的數字的n次方的和等於這個數本身,則稱其為花朵數。例如 當n 3時,153就滿足條件,因為 1 3 5 3 3 3 153,這樣的數字也被稱為水仙花數 其中,表示乘方,5 3表示5的3次方,也就是立方 當n 4時,1634滿足條件,因為 1 4 6 4 3 ...