Fancy Mouse
- -|||
只要两个数加法不产生进位就能满足题意。对于首位来说,可以有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]>0break;
    
for(;t<MAX;t++)
        cout
<<data[t];
    cout
<<endl;
}
posted on 2005-10-22 01:50  Fancy Mouse  阅读(273)  评论(1编辑  收藏  举报