1018: 算法提高 乘法运算

1018: 算法提高 乘法运算

时间限制: 1 Sec  内存限制: 512 MB
提交: 10  解决: 2

[ 提交][ 状态][ 讨论版]
题目链接

题目描述

编制一个乘法运算的程序。
从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出。

输入

输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99)。

输出

输出为4行或7行,符合乘法的竖式运算格式。

样例输入

89 13

样例输出

89
×13
━━━
267
89
━━━
1157

提示

3×89=267,则第四行267右侧对准个位输出。1×89=89,则第五行89右侧对准十位输出。267+890=1157,则1157右侧对准个位输出。 

解题思路:

按照题目意思就是输入两个不大于100的整数,输出他们的乘法竖式。我们知道乘法竖式要么是4行,要么是7行。

由于这是一道蓝桥杯比赛题目,放到了自家的服务器上,结果自家人在后台只给了输入,输出里面什么都没有,于是我按照自己思路做了一下,给后台添了输出数据。

后台测试数据如下:

Sample.in

89 13

Sample.out

89
×13
━━━
267
89
━━━
1157

1.in

15 8

1.out

15
×8
━━━
120

2.in

25 40

2.out

25
×40
━━━
     00
100
━━━
1000

3.in

99 91

3.out

99
×91
━━━
  99
891
━━━
9009

4.in

99 99

4.out

99
×99
━━━
  891
891
━━━
9801


#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
    char m[3],n[3];
    int a[4],b[3],i,j;
    while(~scanf("%s%s",m,n))
    {
        printf("%s\n",m);
        printf("×%s\n",n);
        printf("━━━\n");
        int t1=0,t2=0;
        for(i = 0; i < strlen(m); i++)
            t1 = t1*10 + m[i]-'0';
        for(i = 0; i < strlen(n); i++)
            t2 = t2*10 + n[i]-'0';
        ///现在t1,t2是整数形式的m,n
        if(t2<10)
            printf("%d\n",t1*t2);
        else
        {
            for(i = 0; i < 4; i++)
                a[i] = -1;
            for(i = 0; i < 3; i++)
                b[i] = -1;
            int c1 = 3;
            int c2 = 2;
            int k1 = 0;///进位初始化为0
            int k2 = 0;
            for(j=strlen(m)-1;j>=0;j--)
            {
                int temp1 = (m[j]-'0')*(n[1]-'0')+k1;
                int temp2 = (m[j]-'0')*(n[0]-'0')+k2;
                if(temp1>9)
                    k1 = temp1/10;  ///进位
                else
                    k1 = 0;
                if(temp2>9)
                    k2 = temp2/10;
                else
                    k2 = 0;
                a[c1]=temp1%10;
                c1--;
                b[c2]=temp2%10;
                c2--;
            }
            if(k1!=0)
                a[c1]=k1;
            if(k2!=0)
                b[c2]=k2;
            for(i = 0; i < 3; i++)
                if(b[i]!=-1)
                 break;
            j = i;
            for(;i<4;i++)
                if(a[i]!=-1)
                    break;
                else
                    printf(" ");
            for(;i<4;i++)
                printf("%d",a[i]);
            printf("\n");
            for(;j<3;j++)
                printf("%d",b[j]);
            printf("\n");
            printf("━━━\n");
            printf("%d\n",t1*t2);
        }
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值