本题的想法很简单,就是模拟手算乘法。不一样的是,需要控制输出的结果:每一位都是由1构成的整数。
代码如下:
1 #include <iostream> 2 using namespace std; 3 4 int a[][4] ={{1,7,3,9},{1,1,1,1},{9,3,7,1},{8,6,4,2},{7,9,1,3},{6,2,8,4},{5,5,5,5},{4,8,2,6},{3,1,9,7},{2,4,6,8}}; 5 6 int get(int n) 7 { 8 int k = 0,mm,t; 9 if(n%10 == 1) t = 0; 10 if(n%10 == 3) t = 1; 11 if(n%10 == 7) t = 2; 12 if(n%10 == 9) t = 3; 13 14 int nm = n*a[nm%10][t]; 15 16 while(nm!=0) 17 { 18 mm = nm%10; 19 if(mm == 1) { nm = nm/10; k ++;} 20 else nm = nm + n*a[mm][t]; 21 } 22 return k; 23 } 24 25 int main() 26 { 27 int n; 28 while(cin>>n) 29 cout<<get(n)<<endl; 30 return 0; 31 }
注意二维数组的构造方式: 使得每一次第20行代码执行之后的所得到的数的末位是1。数组中的第一维是上一次nm对10的余数,第二维与所输入的数的末位对应。
另外注意,数组a是可以改变的,也就是说,如果遇到有其他的要求的时候,数组a可以根据要求来改变。