数位拆解(王道)

题目描述:

写个算法,对2个小于1000000000的输入,求结果。

特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5

输入:

 两个小于1000000000的数

输出:

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

样例输入:
123 45
样例输出:
54
#include <iostream>
#include<string.h>
using namespace std;

int main()
{
    int a,b;
    cin >> a;
    cin >> b;
    int buf1[20],buf2[20];
    int size1 = 0;
    int size2 = 0;
    memset(buf1,0,sizeof(buf1));
    memset(buf2,0,sizeof(buf2));
    while(a != 0){
        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];
    cout << ans << endl;

    return 0;
}

 实际上,这里红字部分是最方便进制转换的,这里是相当于10进制的转换了,二进制和十六进制的就%2,/2,%16,/16,然后从后往前输出就可以了

 当然,还有另一种解法,这种解法就直接把所有的输入作为字符串输入了

#include <iostream>
#include<string.h>
#include<cstdio>
using namespace std;

int main()
{
    char a[20],b[20];
    scanf("%s %s",a,b);
    int ans = 0;
    for(int i=0;a[i]!=0;i++)
        for(int j=0;b[j]!=0;j++)
        ans += (a[i]-'0')*(b[j]-'0');//记得,如果数字输入为char时,实际计算的时候是要减‘0’的
    printf("%d",ans);
    return 0;
}

 

posted @ 2018-03-14 19:51  Shaw_喆宇  阅读(242)  评论(0编辑  收藏  举报