方法一:利用每一个数模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; }