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,另外一种 ...
一周排行
  • 在 VMWare 中配置 SQL Server 2005 N + 1 群集 (二) 在Vmware配置虚拟机 在 VMWare 中配置 SQL Server 2005 N + 1 群集 (三) 群集安装 在 VMWa ...
  •   ADO.NET的应用-在这里和大家分享一下我的心得,有不明白的或者有更好见解的,可以联系到我的空间留言,这样相信能够让我们的知识都得到提升.      首先让我们来简单的了解一下,ADO.NET是 一组用于和数据 ...
  • 隐藏分隔线使用如下代码有时会不起作用  self.dataTableView.separatorStyle = UITableViewCellSeparatorStyleNone;  可以试试使用set方法 1 [s ...
  • 边城 赵边城是我的发小,我们上了同样的小学和中学,又同时来到北京. 赵边城毕业后先后加入了BAT这种重量级别的互联网公司. 赵边城从十五年前,就开始写软件了.为了一个女人. 春节同学聚会相遇,相约同行回京,一路瞎扯, ...
  • 概述及基本概念 EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间的通信.比如请求网络,等网络返回时通过Handler或Broadcas ...
  •         在IOS的内存管理机制中,采用引用计数机制.例如:          Object *obj=[[Object allic] init];//执行后,obj的计数器为1:          Objec ...
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>  开头第一句必须上头标签,想格式 ...
  • 转载请注明出处:http://www.cnblogs.com/fangkm/p/3960327.html 硬件渲染依赖计算机的GPU,GPU种类繁多,兼容这么多种类的硬件,稳定性是个大问题,虽然Chromium内部维 ...
  • 2011年是Openflow和SDN(软件界定的网络)领域激动人心的一年.<网络世界>撰稿人阿尔特·费韦尔(Art Fewell,以下简称AF)最近有机会与OpenFlow创始人.Nicira公司CTO马 ...
  • 复星集团董事长郭广昌.图/CFP 新京报讯 (记者李蕾)阿里巴巴正处于赴美IPO的关键时期,对于马云和阿里巴巴质疑声近日纷至沓来.7月17日在复星投资西班牙火腿及酒类制造商Osborne集团的发布会上,复星集团董事长 ...