A × B problem

描述

Redraiment碰到了一个难题,需要请你来帮忙:给你两个整数,请你计算A × B。

输入

数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数。 
接着有T组数据,每组数据只有一行,包括两个非负整数A和B。 
但A和B非常大,Redraiment能保证这些数用long来保存一定会溢出。 
但A和B的位数最大不会超过100位。

输出

对应每组测试数据,你都要输出两行: 
第一行为:"Case #:", # 代表这是第几组测试数据。 
第二行是一个等式:"A * B = Sum", Sum 代表 A × B 的结果。 
你要注意这个等式里包含了几个空格。 
要求每组数据之间都需要保留一个空行。

样例输入

2
1 2
123456789 987654321

样例输出

Case 1:
1 * 2 = 2

Case 2:
123456789 * 987654321 = 121932631112635269

提示

Case后有一个空格
冒号(:)后没有空格
乘号(*)两端各有一个空格
等号(=)两端各有一个空格

#include <stdio.h>
#include <string.h> 
int main()
{
    char a[101],b[101];
    int i,j,k,cas,count=1,num2,num3;
    scanf("%d",&cas);
    getchar();
    while(cas--)
    {
        int c[100000]={0};
        scanf("%s %s",a,b);
        num2=strlen(a);
        num3=strlen(b);
    getchar();
    if(strcmp(a,"0")==0||strcmp(b,"0")==0)
    {
        printf("Case %d:\n",count);
        printf("%s * %s = 0\n",a,b);
        count++;
    }
    else {
        for(i=0;i<num2;i++)
        {for(j=0;j<num3;j++)
        {c[i+j]+=(a[num2-i-1]-'0')*(b[num3-j-1]-'0');
        k=i+j;
        while(c[k]>=10)
        {c[k+1]+=c[k]/10;c[k]%=10;k++;}
        }
        }
        i=9999;num2=i;
        while(c[i]==0)
        {
            i--;num2 = i;
        }
        printf("Case %d:\n",count);
        count++;
        printf("%s * %s = ",a,b);
        for(i=num2;i>=0;i--)
        {printf("%d",c[i]);}
        printf("\n");}
    if(cas>=1)
    {printf("\n");}
}
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值