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,另外一种 ...
一周排行
  • 1. 打开 配置工具>SQL Server 配置管理 选项. 2. 选择SQL Server 服务,将右侧的选项状态尽量启动,但是好像第二.三个无法启动,这个无所谓. ※ 其中第一个是 SQLEXPRESS , ...
  • 全球知名流媒体 (在线视频)播放服务商奈飞公司近日在美股市场上演上涨传奇,4个交易日涨幅高达70%.这也掀起了流媒体概念股的炒作热潮,中概股中的优酷.土豆.搜狐等近期都有上佳表现.此次奈飞公司股价暴涨,主要动力来自四 ...
  • 接到大量站长报告,中国万网在今天下午受到攻击,网站已打不开,FTP服务器都连不上.致电万网客户服务被告知确认受到攻击.截至发稿万网主页已经恢复,但客户服务的恢复工作在进行中.访问:中国万网
  •   貌似刚开学的时候装了个逼,和老师立了个flag说我要写个正则表达式引擎,然后学期末估计老师早就忘了这茬了,在历时3个月的懒癌发作下,终于在这学期末deadline的时候花了一个下午加晚上在没有网的房间写完了它,于 ...
  •    最近将Elasticsearch由1.2.2升级到1.4.4后,sense工具无法使用了,它发到Elasticsearch集群的请求没有任何的响应.阅读了Elasticsearch的文档才了解到,这是1.4.X ...
  • 今天小编为大家带来了魔兽世界熔渣车间奥尔高格Boss打法攻略分享,感兴趣的朋友们可以跟着小编去下文了解一下哦. 魔兽世界熔渣车间奥尔高格Boss打法 BOSS难度等同于格鲁尔,毫无难点可言,P1如H模式,除了打断次数 ...
  • 一.LVM逻辑卷管理 1. 定义 将多个物理分区/磁盘从逻辑上组合成一个更大的整体,从其中划分出不同的逻辑分区,逻辑分区的大小可以根据需求扩大和缩减 2. LVM概念 PV:物理卷 VG:卷组(可以包含65534个P ...
  • zabbix监控服务,不但可以利用zabbix server自带的模板,还可以自定义监控. 一实现方法 在zabbix_agentd.conf中添加用户自定义模块,可以实现各种数据采集,自定义模版,比如 从某一个文件 ...
  • 访问网址:http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1 根据上面地址的结构,我暂时研究到就三项属性有效,他们分别是 1.form ...
  • 前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文件中的配置貌似出 ...