乘积的末三位

来源:互联网 发布:外国域名注册网站 编辑:程序博客网 时间:2024/04/29 02:32
题目名称:乘积的末3位(product)
 * 题目描述:
 * 输入若干个整数(可以是正数、负数或者零),输出它们的乘积的末3位。
 * 这些整数中会混入一些由大写字母组成的字符串,你的程序中应当忽略它们。
 * 样例输入:+1 +2 + -1 -2 k 12 english 54 9876 -111

 * 样例输出:712


[cpp] view plaincopy
  1. /** 
  2.  * 题目分析: 
  3.  *     题目难度主要在于参差的数据类型输入。 
  4.  * 题目总思路,使用while语句逐个string作为单词输入。 
  5.  * 然后通过调用函数bool getInt(...)判断该单词是否整数,另外,再利用该函数的形参将正确的整数返回。 
  6.  * 将从函数里面得出的整数与结果相乘,乘后保留末三位整数即可。 
  7.  * 其中,关于如何实现bool getInt(string get, int & nowGet)才是难题。实现方法如下: 
  8.  * 首先,考虑不是整数的情况,1.字符串为空,返回false, 2.是字母或是仅有一个符号。 
  9.  * 除了字符串为空的情况外,我们可以开始考虑字符串不为空的情况,字符串不为空时,存在三种情况, 
  10.  * 第一种,带符号的整数,第二种,不带符号的整数,第三种,不是整数。 
  11.  * 关于这三种情况,可以使用一个if-else if- else语句来实现, 
  12.  * 第一种情况:if ('+' == get[0] || '-' == get[0])带上了符号,可以直接忽略读取第[0]位符号位,然后再 
  13.  *               从最尾位开始读取,读取3位数即可停止,当读取途中不满三位数或者碰上符号位时, 
  14.  *               立即返回。 
  15.  * 第二种情况:if('0' <= get[0] && '9' >= get[0]) 直接是数字的情况下,跟第一种情况的思路基本一致, 
  16.  *               直接从最尾位开始取个位数,次尾位取十位数,倒数第三位取百位数。 
  17.  * 第三种情况:由于不符合需要的整数的转换条件,只需要直接返回false即可. 
  18.  * 另外,如果想将字符型的数字转换成数值,只需要将原来的字符型减去'0'即可得到相对应的数值。 
  19.  **/  
  20.   
  21. #include <cstring>  
  22. #include <string>  
  23. #include <cctype>  
  24. #include <cmath>  
  25. #include <iostream>  
  26.   
  27. using namespace std;  
  28.   
  29.   
  30. bool getInt(string get, int & nowGet)  
  31. {  
  32.     int stringLong = get.length();  
  33.     if (0 == stringLong){  
  34.         return false;  
  35.     }  
  36.     nowGet = 0;  
  37.     if ('+' == get[0] || '-' == get[0]){ // 带符号的正数或负数  
  38.         if (0 == (stringLong - 1)){ // 它只包含了一个符号,则直接返回  
  39.             return false;  
  40.         }  
  41.         for (int j = 0, i = stringLong - 1; i > 0 && i >= stringLong - 3; --i, ++j){  
  42.             if ('+' == get[i] || '-' == get[i]){    // 正在循环转换的过程,这个数字不满三位数,遇上了符号,直接跳出  
  43.                 break;  
  44.             }  
  45.             nowGet += int(get[i] - '0') * (int) (pow(double(10), j));  
  46.         }  
  47.         return true;  
  48.     }  
  49.     else if('0' <= get[0] && '9' >= get[0]){ // 直接是数字的情况下  
  50.         for (int j = 0, i = stringLong - 1; i >= 0 && i >= stringLong - 3; --i, ++j){  
  51.             nowGet += int(get[i] - '0') * (int) (pow(double(10), j));  
  52.         }  
  53.         return true;  
  54.     }  
  55.     else{   // 是字母  
  56.         return false;  
  57.     }  
  58. }  
  59.   
  60. int main()  
  61. {  
  62.     string word;  
  63.     long result = 1;  
  64.     while(cin >> word){  
  65.         int temp;  
  66.         if (getInt(word, temp))  
  67.         {  
  68.             result = (result * temp) % 1000;  
  69.         }  
  70.     }  
  71.     cout << result << endl;  
  72.     return 0;  
  73. }  

0 0
原创粉丝点击