本题的想法很简单,就是模拟手算乘法。不一样的是,需要控制输出的结果:每一位都是由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可以根据要求来改变。

posted on 2015-05-05 17:17  fqbrighter  阅读(131)  评论(0编辑  收藏  举报