只要两个数加法不产生进位就能满足题意。对于首位来说,可以有8*9/2=36种选数方式(因为首位不为0),对于其他位来说,可以有9*10/2=55种选数方式,乘法原理以后,剩下来的就是大数乘法和输出了。#include<iostream>using namespace std;const int MAX = 100;class Num{public: Num(int n); Num operator *(int a); void Print();private: int data[MAX];};int main(){ int n; while(cin>>n) { Num a(36); for(;n>1;n--) a=a*55; a.Print(); } return 0;}Num::Num(int n){ int t; data[MAX-1]=n; for(t=MAX-2;t>=0;t--) data[t]=0;}Num Num::operator *(int a){ int t,mem=0; Num b(0); for(t=MAX-1;t>=0;t--) { b.data[t]=a*data[t]+mem; mem=b.data[t]/10; b.data[t]%=10; } return b;}void Num::Print(){ int t; for(t=0;t<MAX-1;t++) if(data[t]>0) break; for(;t<MAX;t++) cout<<data[t]; cout<<endl;} 转载于:https://www.cnblogs.com/FancyMouse/articles/259634.html