ZJUT1217

#include <stdio.h>
#include <string.h>
#define MAX 220
int a1[MAX], a2[MAX], a3[MAX*2];   //a3的范围要比a1,a2的大点,因为乘法可能乘后溢出
char str1[MAX], str2[MAX];
int main()
{
    while(scanf("%s%s",str1,str2))
    {
        if(strcmp(str1,"0")==0&&strcmp(str2,"0")==0)  //两者为0则退出****并且要注意比较是两个字符串,所以0不能写成'0',要不然出错,应写成"0"
        break;
        memset(a1,0,sizeof(a1));
        memset(a2,0,sizeof(a2));
        memset(a3,0,sizeof(a3));
        int i, j,len1, len2;
        len1=strlen(str1);
        len2=strlen(str2);
        for(i=len1-1,j=0;i>=0;i--)     //字符转换成数字
        {
            a1[j++]=str1[i]-'0';
        }
        for(i=len2-1,j=0;i>=0;i--)
        {
            a2[j++]=str2[i]-'0';
        }
        for(i=0;i<len2;i++)    //把每次成绩和保存在a3中
        {
            for(j=0;j<len1;j++)
            {
                a3[i+j]+=a2[i]*a1[j];    //一个数的第i 位和另一个数的第j 位相乘所得的数,一定是要累加到结果的第i+j 位上。这里i, j 都是从右往左,从0 开始数。
            }
        }
        for(i=0;i<MAX*2;i++)   //处理进位的问题
        {
            a3[i+1]+=a3[i]/10;
            a3[i]=a3[i]%10;
        }
        for(i=MAX*2-1;i>=0;i--)
        {
            if(i>=0&&a3[i]!=0)
            {
                for(;i>=0;i--)
                printf("%d",a3[i]);
                printf("\n");
            }
            else if(i==0&&a3[i]==0)
            printf("0\n");
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值