hdu4207(两大数相乘 并输出过程)

#include<stdio.h>

#include<string.h>

int main()

{

    __int64 a,b;

    intm[100][100],i,j,max,a1[8],b1[8],k,t=1;

    while(scanf("%I64d%I64d",&a,&b)==2&&(a||b))

    {

        memset(m,0,sizeof(m));//注意每次都要清零

        memset(a1,0,sizeof(a1));

        memset(b1,0,sizeof(b1));

        i=0;j=0;

        

        printf("Problem %d",t);

        printf("n");

        t++;

        

        while(a||b)//拆分a和b

        {

            if(a)

            {

               a1[i++]=a%10;a/=10;

            }

           if(b)

            {

               b1[j++]=b%10;b/=10;

            }

        }

        

        max=k=0;

        int i1,j1,c,len[100];

        for(j1=0;j1<j;j1++)//计算每一个相乘的值,并用二维数组 m 装数值

        {

            c=0;max=j1;

            for(i1=0;i1<=i;i1++)//要注意等号i1<=i

            {

               if(i1<i)

               {

                   m[k][max]=a1[i1]*b1[j1]+c;

                  c=m[k][max]/10;

                   m[k][max]%=10;

                   max++;

               }

              else

              {

                  m[k][max]=c;if(c)max++;

              }

            }

            k++;

        }

        c=0;

        for(i1=0;i1<max;i1++)//计算最终的结果数值

        {

            m[k][i1]=c;

            for(j1=0;j1<k;j1++)

            m[k][i1]+=m[j1][i1];

            c=m[k][i1]/10;

            m[k][i1]%=10;

        }

        if(c)

        {m[k][max]+=c;max++;}


            int flag=0;                       //输出

            for(i1=max-1;i1>=0;i1--)//输出a的值

            if((a1[i1]||flag)&&i1<i)

           {printf("%d",a1[i1]);flag=1;}

            else

            printf(" ");

            printf("n");


            flag=0;

            for(i1=max-1;i1>=0;i1--)//输出b的值

            if((b1[i1]||flag)&&i1<j)

              {

                  printf("%d",b1[i1]);flag=1;

              }

            else

            printf(" ");

            printf("n");


            for(i1=max-1;i1>=0;i1--)//输出隔开符

            printf("-");

            printf("n");


            int flog=0,e=0,flg=0,v=0;             //输出中间的每一行值

            for(i1=0;i1<k;i1++)

            {

               flag=0;flog=0;

               for(j1=max-1;j1>=0;j1--)//判断m[i1]中的值是否全为零,

               if(m[i1][j1])

               {

                   flg=1;break;

               }


               if(flg)//m[i1]里面的数值不全为零,则输出m[i1]的值,否则不输出

               {

                    for(j1=max-1;j1>=0;j1--)

                   if((m[i1][j1]||flag)&&j1>=i1-e)//j1>=i1-e为了不多输出零,e 是代表m[i1]的上面行全为零的个数

                   {

                       printf("%d",m[i1][j1]);flag=1;flog=1;//flag是控制数值中间的零输出,flog是换行开关(有值输出则换行,否则不换行)

                   }

                   elseif(j1<i1) //小于i1以后的多余的零不用输出来

                   flag=0;

                   else

                   printf(" ");

                   v++;  //记绿输出的次数

               }


               flg=0;

               if(flog)//有输出值,则换行,并令e=0

              {

                   printf("n");e=0;

              }

               else

               e++;//表明m[i1]里面的值全为0,则e加1;

           }

           if(v!=1)//如果v =1表明不必再输出一次

           {

               for(j1=max-1;j1>=0;j1--)

           printf("-");

           printf("n");

           for(j1=max-1;j1>=0;j1--)

           printf("%d",m[k][j1]);

           printf("n");

           }


    }

    return 0;

}

 

更多相关文章
  • 微软会在7月29日正式推出Windows 10 系统,在之后Windows 10手机版也会推出(虽然具体时间还未明确).近日,又有三款使用Windows 10 Mobile系统的Lumia新机配置被曝光了.被曝光的新机参数表(图片引自WMPU)此 次被曝光的三款新机分别为Lumia550/750/8 ...
  • “妈妈,再也不用担心我的linux配置啦...”
  • ■金美慧 祝卓宏新闻事件近期国外畅销的一本<秘密花园>,以迅雷不及掩耳之势风靡中国大半个江山.这是一本什么书呢?它是一本黑白画集,读者可以任意挑选颜色为其着色,这个秘密花园里藏有各种可爱的动物和让人着迷的风景.<秘密花园>是英国插画家乔汉娜·贝斯福创作的成人版涂色书,上市不到 ...
  • 上次我们讲到page frame是物理内存的基本组成单位.那Kernel就必须要有一套机制来管理空闲的page frames.这一点不难理解.每个县长必须要把本县可用的劳动力登记在册,这样哪天皇帝要征兵了,你才不至于手忙脚乱. 这个问题看似简单,实则不然.因为这里面有一个外碎片的问题. 在物理内存中 ...
  • 随着企业内网络交换机的升级,端口速率越来越高,网络带宽也随之而增加,本来应当让人感觉越来越快的网络,却依然像蜗牛一样慢.原因到底出在哪里呢?主要原因有两个,一是各种网络病毒在网络内肆虐,二是对网络带宽的滥用(如大量BT下载以及视频).尤其是后者,一直是在网络应用过程中最让企业头痛的问题.那么,有没有 ...
  • 在 ASP 中,有两个很常用的集合,一个是 Request.QueryString,另一个是 Request.Form.这两个集合可以获取 HTML 表单(HTML Forms) 提交的信息. Request.QueryString HTML 表单中的 method 有两种,一种是 get,另外一种 ...
一周排行
  • 根据Emedia公司的一项最新研究,大约有近94%的公司承认,他们在防止公司机密通过邮件外泄方面显得力不从心. 这份研究是由提供邮件管理的Emedia公司对125名IT管理人员采访后得出的.经调查,只有6%的受访者表 ...
  • Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xh ...
  • 最近一直在学习SGBM算法,作为一种全局匹配算法,立体匹配的效果明显好于局部匹配算法,但是同时复杂度上也要远远大于局部匹配算法.算法主要是参考Stereo Processing by Semiglobal Match ...
  • 8月6日报道 台媒称,无人机除了空拍之外,另一主要功能是运输.例如网络零售商"亚马逊" 早就看出它的巨大潜力而进行开发.台湾东森新闻网8月5日报道,不过,在"亚马逊"正式启动无 ...
  • 序号 模式 一句话说明 1 简单工厂 避免重复的new代码. 2 单件(Singleton) 全局只有一个. 3 工厂方法(Factory Method) 生产系列产品. 4 抽象工厂(Abstract Factor ...
  • 第七天(12月4日) RHCE的考试安排在今天下午,这两天一直在做模拟训练,相信应对考试问题不大.下午1点半开始考试,时间2个小时,我订了4点半的返程车票,预计回到家里已是深夜了. 在RHCE考试时,一定要记下之前考 ...
  • Shell目录 ①Shell命令行的运行: ②编写.修改权限和执行Shell程序的步骤: ③在Shell程序中使用参数和变量: ④表达式比较.循环结构语句和条件结构语句: ⑤在Shell程序中使用函数和调用其他She ...
  • 阅前声明: http://blog.csdn.net/heimaoxiaozi/archive/2007/01/19/1487884.aspx / Exercise 1 * Write a program that ...
  • Round() SELECT ROUND( number, [ decimal_places ] ) FROM DUAL 说明: number : 将要处理的数值 decimal_places : 四舍五入,小数取几 ...
  • HTML 5推荐标准的成功之一是提供了一个详细的规范来说明如何解析HTML文档.一直以来,浏览器提供商都试图猜测和拷贝其它浏览器的实现,寄希望于他们的解析器在处理HTML文档的时候不产生过多的问题. 尽管HTML 5 ...