Day8:数位拆解

一、数位拆解

  • 题目描述

写个算法,对2个小于1000000000的输入,求结果。 特殊乘法举例:123 * 45 = 14 +15 +24 +25 +34+35

  • 输入描述

两个小于1000000000的数

  • 输出描述

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

  • 示例输入

123 45

  • 示例输出

54

代码8.1.1 求余取模,除10移位

#include 

int main(){
    int a, b;
    while(scanf("%d %d",&a, &b) != EOF)
    {
        int buf1[20], buf2[20]; //暂存数位拆解出来的数
        int i = 0, j = 0, s = 0;
        while(a > 0)
        {
            buf1[i++] = a % 10;
            a /= 10;
        }
        while(b > 0)
        {
            buf2[j++] = b % 10;
            b /= 10;
        }
        for( int m = 0; m < i; m++)
        {
            for(int n = 0; n < j; n++)
            {
                s += buf1[m] * buf2[n];
            }
        }
        printf("%d\n", s);
    }
    return 0;
}

8.1.2 存为字符串

#include 

int main(){
    char a[11], b[11]; //利用字符串读入
    while(scanf("%s%s",a,b) != EOF)
    {
        int s = 0;
        for( int m = 0; a[m] != 0; m++)
        {
            for(int n = 0; b[n] != 0; n++)
            {
                //字符与字符'0'ASCII值的差为字符对应的数字
                s += (a[m] - '0') * (b[n] - '0');
            }
        }
        printf("%d\n", s);
    }
    return 0;
}

二、进制转换

  • 题目描述

输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。

  • 输入描述

输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。

  • 输出描述

输出格式:每个测试用例的输出占一行,输出A+B的m进制数。

  • 示例输入

8 1300 48
2 1 7
0

  • 示例输出

2504
1000

代码8.2

#include 

int main()
{
    long long a, b; //确保不会溢出
    int m;
    while(scanf("%d", &m) != EOF)
    {
        if(m == 0) break;
        scanf("%lld%lld", &a, &b);
        a = a + b; //先求和
        //转为m进制数
        int s[50], i = 0;
        do{
            s[i++] = a % m;
            a /= m;
        }while(a != 0); //即使a=0也至少会执行一次do
        for(int j = i - 1; j >= 0; j--)
        {
            printf("%d",s[j]); //顺序逆过来,高位到低位
        }
        printf("\n");
    }
    return 0;
}

你可能感兴趣的:(Day8:数位拆解)