zoukankan      html  css  js  c++  java
  • 数位拆解(王道)

    题目描述:

    写个算法,对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;
    }
  • 相关阅读:
    只要肯下功夫,十岁也能学得会的 Docker 精简版!
    sprintf和sscanf的用法
    ubuntu在线安装vscode
    Makefile模板
    本地Git配置绑定远程Github账户
    mysql多表查询
    VS error 2019 错误
    Oracle--约束
    Oracle--增删查
    Oracle--子查询
  • 原文地址:https://www.cnblogs.com/xym4869/p/8569677.html
Copyright © 2011-2022 走看看