方法一:利用每一个数模10可以取出个位的原理,从后往前将x的最低位(个位)依次与y的每一位相乘,然后用x的次低位再次重复上述步骤,直到x的最高位乘尽
例如123 * 45 = 3(123 % 10) * 5(45 % 10) + 3(123 % 10) * 4(4 % 10) + 2(12 % 10) * 5(45 % 10) + 2(12 % 10) * 4(4 % 10) + 1(1 % 10) * 5(45 % 10) + 1(1 % 10) * 4(45 % 10) = 54

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    int x, y;
    while(~scanf("%d %d", &x, &y)){
        int tmp;
        tmp = y;//将y保存至一个临时变量,为后续每一次内层循环结束时可以还原
        int sum = 0;//保存累加和
        //当x不为0时,用x的当前个位去乘y的每一位
        while(x > 0){
            while(y > 0){
                sum += (x % 10) * (y % 10);//用x的个位乘以y的个位
                y /= 10;
            }
            y = tmp;//将y还原成输入的数
            x /= 10;//除以10:用x的下一位去乘
        }
        printf("%d\n", sum);
    }
    return 0;
}

方法二:利用C++的string直接输入字符串进行相乘
C++基于范围的for循环详解:http://c.biancheng.net/view/1416.html

#include <iostream>
#include <string>
using namespace std;
int main(){
    string x, y;
    while(cin >> x >> y){
        int sum = 0;
        for(auto itx : x){
            for(auto ity : y){
                sum += (itx - '0') * (ity - '0');
            }
        }
        printf("%d\n", sum);
    }
    return 0;
}