数位拆解---特殊乘法

题目描述:

写个算法:对2个小于100000000的输入,求结果。
特殊乘法举例:123*45=1*4+1*5+2*4+2*5+3*4+3*5

输入:
两个小于10000000的数

输出:
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。

样例输入:
123 45
样例输出:
54

#include<stdio.h>
int main(){
    char a[11],b[11];
    while(scanf("%s%s",a,b)!=EOF){
        int ans=0;
        int i,j;
        for(i=0;a[i]!=0;i++)
            for (j=0;b[j]!=0;j++)
                ans+=(a[i]-'0')*(b[j]-'0');
        printf("%d\n",ans);
    }
    return 0;
}
#include<stdio.h>
int main(){
    char a[11],b[11];
    while(scanf("%s%s",a,b)!=EOF){            //利用字符串将两个数字读入,作为字符串保存在内存中
        int ans=0;                            //累加变量
        for(int i=0;a[i]!=0;i++)             //遍历a中每一个字符,直到a字符串结尾
            for (int j=0;b[j]!=0;j++)         //遍历b中每一个字符,直到b中字符串结尾
                ans+=(a[i]-'0')*(b[j]-'0');     //计算a,b中每一个字符所代表的的数字两两乘积之和
        printf("%d\n",ans);                      //输出答案
    }
    return 0;
}

以下程序在Dev C++中可以跑通,但是在Visual Studio中无法跑通(Visual Studio重建一个系统项目皆可以跑通了)。

#include<stdio.h>
int main(){
    int a,b;                      //保存两个整数的变量 
    while(scanf("%d%d",&a,&b)!=EOF){      //输入两个整数 
        int buf1[20],buf2[20],size1=0,size2=0;  //分别保存从两个数中拆解出来的数位数字,其数量由size1,size2表示 
        while(a!=0){                      //数位拆解,只要当a依然大于零就不断重复拆解过程 
            buf1[size1++]=a%10;            //取得当前个位上的数字,将其保存 
            a/=10;                 //将所有数位上的数字移动到高一位上 
        }
        while(b!=0){              //拆解第二个数字 
            buf2[size2++]=b%10;
            b/=10;
        }
        int ans=0;                   //计算答案 
        for(int i=0;i<size1;i++)
            for (int j=0;j<size2;j++)
                ans+=buf1[i]*buf2[j];     //两两想乘后相加 
        printf("%d\n",ans);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值