当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

求从棋盘的坐下角到右上角的无环路的总数

     这个程序写得比较乱,没好好整理.因为数字大于700的话就要超出屏幕了,所以就用科学表示方法了,其实程序有点浪费空间的,有些地方还可以改进的.
    /*跳蚤侦探2003.9.26*/
    #define N 3000
    void pr1(int *num)/*科学方式输出阶层*/
    {
     int i,j;
     for(i=0;;i++)
      if(num[i]!=0)
       {
        printf("%d",num[i]);
        printf(".");
        for(j=i+1;j<=i+11;j++)
        printf("%d",num[j]);
        printf("e+");
        printf("%d\n",N-i-1);
        break;
       }
    }
    void pr(int *num)/*输入结果*/
    {int i,j;
     for(i=0;;i++)
      if(num[i]!=0)
       {
       for(j=i;j<N;j++)
        printf("%d",num[j]);
       break;
       }
     printf("\n");
    }
    fun(int num[],int numx[],int x,int y)/*相乘结果函数*/
    {int t[N],i,j,k,tt[N]={0};/*tt数组用来存放竖式的每一行*/
     for(i=0;i<N;i++)/*用来反复乘第一行*/
      {t[i]=num[i];num[i]=0;}
     for(i=3;i>=3-y;i--)/*1位到3位的乘法*/
      {
       for(j=N-1;j>=N-x;j--)
        tt[j+i-3]=numx[i]*t[j];/*记录数式*/
       for(j=N-1;j>=1;j--)/*这里其实可以用个变量来算每一行到第几位,这样可以节约时间*/
      if(tt[j]>=10)
       {
        tt[j-1]+=tt[j]/10;
        tt[j]=tt[j]%10;
       }
       for(j=0;j<N;j++)/*竖式相加得出最后乘出来的结果*/
       {num[j]+=tt[j];tt[j]=0;}
      }

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接